Operating System – 1

– CPU 인터럽트

  – CPU는 하던 일을 중단 한후, 서비스루틴의 실행지점으로 시작주소를 옮긴다. 실행을 완료한 후, 인터럽트된 일을 재개한다.

  – ex : 나는 6시간에 한번씩 안약을 넣는다 (하던일 도중 안약을 넣음)


– 프로세스 관리

  – 스케쥴링 기법


– Cache : 정보는 보통 RAM에 저장된다.

 – 정보가 사용됨에 따라, 일시적으로 캐시에 복사됨.

 – 캐시에 정보가 없다 -> 램에서 정보를 가져오므로 느려진다. 


– PCB (Process Control Block)

  – 각 프로세스는 PCB에 의해 표현될수있다.


– 스케쥴러

  – 기본적으로 프로세스들은 Queue로 진입함. 

  – 이 프로세스 큐안의 프로세스를 효율적으로 선택하는 것이 스케쥴러.


– Context Switch

  – CPU가 다른 프로세스로 작업을 전환하는 것

  – 이를 위해, 현재 프로세스의 상태를 PCB에 저장하고 다른 작업의 프로세스 상태를 Restore 한다. 

  – ex) c코딩 중 opencl의 gpu 처리 이동

    – Context switch 동안, 시스템은 아무일도 할 수없다. (overhead)


– 다중 프로세싱

  – 작업을 여러 프로세스로 처리.

  – 프로세스를 요청할때마다 프로세스를 만드므로, 메모리 및 시간의 소모가 크다.


– 다중 쓰레딩

  – 같은 메모리 내에서 요청한 작업만 수행하는 스레드를 만들고 실행한다.

  – 요청이 많을수록 병렬성이 높아진다.


– 쓰레드 풀

  – 일정량의 Thread를 만들어 놓고 돌림.


– Dispatcher : CPU스케쥴링에 포함되어있다.

  – Context switch

  – User mode 변환

  – 프로그램 재시작을 위해 적절한 위치로 주소 점프


– Dispatch Latency 

  – 하나의 프로세스를 중단시키고 다른 프로세스를 실행하기 까지 걸리는 시간


– CPU 스케쥴링의 종류

  – FCFS(First come, First served)

    – 가장 기본

  – SJF (Shortest job first)

    – 최소의 평균 대기시간 : 최적

    – 그러나, CPU Burst 시간 측정이 어렵다.

    – 장기 스케쥴링은 가능은 하나, 단기 스케쥴링은 측정방법이 없다.

  – Priority Scheduling

    – 우선시간 > Burst시간 기준

    – 우선시간(priority)를 가장 첫번째 고려항목으로 선정.

    – 다양한 요인에 의해 계산한다.

    – 선점 / 비선점 가능

    – indefinite blocking : 가장 큰 문제

      – 실행준비는 되어있지만, CPU를 사용못한다.

      – 해결법 : Aging -> 우선순위를 조금씩 올린다.

  – RR (Round Robin)

    – 시분할을 위해 설계됨. 프로세스 사이를 자유로이 이동할 수 있다.

    – 할당받은 시간만큼 프로세스를 진행한다.

      – 할당받은 시간이 클수록 FCFS에 가까워짐.

    – 잦은 Contexst Switch로 인해 성능감소가 우려된다.


– Critical Section

  – 쓰레드들에 의해 간섭이 일어날 소지가 있는 영역(코드)

  – 이 구간은 하나의 Thread만 사용한다. (다른 쓰레드 접근 불가 -> Locking 기법 활용)

    – 상호배제를 알아보자.

  – 해결책

  1) Semaphore

  – 임계영역에 대한 최대 허용치 설정

  – 허용치 만큼 쓰레드가 접근할 수 있다. ( 접근시마다 카운트를 뺀다)

  2) Mutex

  – 한번에 하나의 쓰레드만 실행

  – 첫번째 쓰레드가 끝날때까지 대기한다.


– Deadlock

  – 두개이상의 작업이 서로 상대방의 작업이 끝날때까지 기다리느라, 아무것도 하지 못하는 상태

  – ex : 세마포어 예제 및 식사하는 철학자 문제 

– Deadlock 조건

  1) 상호배제 : 한자원은 하나의 프로세스만 선점

    – 다른 프로세스는 끝날때까지 대기

  2) 점유와 대기 : 프로세스가 할당된 자원을 가진상태에서 다른 자원을 갖기위해 대기

  3) 비선점 : 프로세스가 어떤 자원의 사용을 마칠때까지 그 자원을 뺏을 수 없다. 

    – 이미 할당된 자원은 선점하지 않아야한다.

  4) 순환대기 : 순환적으로 자원을 대기

    – 각 프로세스는 다음 프로세스의 자원을 대기한다


– Deadlock 예방

  1) 상호배제 제거

    – 공유 불가능한 자원을 사용해서 발생한 것이다. 제거하거나 공유자원을 사용한다(읽기전용파일)

  2) 점유와 대기 제거

    – 프로세스가 자원 요청시, 다른 자원을 갖고 있지 않아야 한다.

    – ex : DVD->하드->프린트

    1 : 전체에 대한 자원 요청. 프린트는 마지막에서 필요하지만 전체 실행시간동안 프린트 점유함.

    – 단점 : 많은 자원이 할당 된후, 오랫동안 사용을 안하므로 자원 이용률이 떨어진다.

    2 : 순서대로 자원점유

    – DVD하고 방출-> 하드 파일하고 방출..

    – 단점 : 중간의 단계가 다른 프로세스에게 할당 가능. 다른 프로세스가 끝날때까지 무한 대기상태가 가능하다.

  3) 비선점 제거

    – 비선점 프로세스에 선점가능한 프로토콜을 생성한다.

    – 한 프로세스가 자원요청 -> 가능한가? -> 할당

      -> 불가능한가? -> 타 프로세스에 할당이 가능한가? -> 뺏어온다(선점)

  4) 순환대기 제거

    – 순서를 부여한다. 자원유형에 따라 순서를 메긴다.


– Deadlock 무시

  – 데드락 에방 및 회피기법 사용시, 성능에 영향을 미친다.

  – 데드락 확률이 작으면 그냥 내버려둔다.

답글 남기기