2021-09-12

0912 운영체제와 스레드

 1. 운영체제의 역할중 중요한 것 : process관리, 프로세스 스케쥴링 & 동기화 문제 해결.

2. 프로세스 스케쥴링을 위한 다양한 큐

1) 하드웨어-> 메모리 2) 메모리 -> cpu 3) 메모리 -> 하드웨어 (임시해제. 한동안 해당 프로세스가 쓰이지 않을때 꺼져!! 하고 돌려보냄)

2) > 3) > 1)순으로 자주 일어난다. 

3. 편의상 프로세스 스케쥴링이라고 말하고 있지만- 사실 현대의 운영체제는 그것보다 훨씬훨씬 똑똑하다. 스레드 스케쥴링을 한다. p1프로세스의 1번스레드 2번스레드 돌리다가 p2프로세스의 a번 b번 돌리다가 하는 식이다. 스레드 스케쥴링을 위해서 해당 스레드 정보를 운영체제의 pcb영역에 저장했다가 돌아오면 restore하는 식으로 계속 context switching을 한다. 

그래서 스레드를 무작정 많이 만들어도 안좋은게 , context switching을 해야하는 비용이 많이 들고, 아무리 경량 프로세스라고 하더라도 스레드를 만드는 비용 ( code영역, data영역 생성등..) 이 있기 때문에. 적정 스레드 수를 유지하는 것이 중요하다. 

4. 스케쥴링 기법 : FIFO, priority , SJF, 라운드로빈(time- slicing) , 다단계 피드백 큐, 다단계 큐 등

5. 선점형 스케쥴링 vs 비선점형 스케쥴링 : 선점형은 우선순위에 따라서 cpu점유를 뺏길수있고, 비선점은 한번 cpu점유에 들어가면 뺏기지 않음. 

6. 스레드 동기화생각해야 하는 이유?

자바나 c같은 하이랭귀지 언어에서는 사실상

balance += money;

이렇게 한줄로 끝나는데. 사실 이걸 어셈블리어로 변환하면

1) money 데이터를 메모리에서cpu 레지스터로 load하고->

2) balance 데이터를 메모리에서 cpu 레지스터로 load하고-> 

3) add 한다

라는 여러 과정이 함축되어있음 . 

그래서 저 1,2,3과정중에서 여의치 않게 context switching이 일어나면 - 비정상적인(의도치않았던) 결과를 받아보게 되는 것이다. 

댓글 없음:

댓글 쓰기

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...