목록운영체제 (31)
Shine's dev log
요즘 나오는 대부분의 컴퓨터들은 하나의 프로세서(CPU)로만 동작하는 것이 아니라, 여러개의 프로세서들로 이루어져있다. 멀티프로세서 환경에서 스케줄링 시 고려해야 할 점들을 한번 짚어보자. 1. multiple-processor 먼저, 멀티프로세서의 종류와 특징에 대하여 한번 살펴보자. 프로세싱 기법에 따른 구분1) Asymmetric multiprocessing - 하나의 master 프로세스가 다른 프로세스들을 관리감독하는 형태- master 프로세서가 load balancing을 다 결정한다. (load balancing은 조금 있다가 나온다.) 2) Symmetric multiprocessing (SMP) - 각각의 프로세스가 동등한 권한으로 프로세싱하는 형태..
앞서 살펴보았던 기본적인 스케줄링 방법 이외에 한단계 더 심화된 스케줄링 방법에 대하여 알아보자. 오늘 알아볼 스케줄링 방법은 크게 두가지인데, 1)Proportional Share scheduling과 2) Real-time System의 스케줄링이다. 1. Proportional Share Scheduling 각 프로세스가 전체 Time share 중에 몇 퍼센트정도 가질지 결정하는 스케줄링 기법. 전체 CPU실행시간을 Time share라는 단위로 쪼갠 뒤, 각 프로세스에게 일정 퍼센트만큼 할당해주는 방법이라고 생각하면 된다. 전체 Time share을 T라고 했을 때, 각 프로세스는 N만큼의 시간을 할당받는다. (N 두가지 예시를 살펴보자. 예1) MQ에서 큐 끼..
이때까지 프로세스 스케줄링에 대한 이론적인 개념을 배워보았다면, 오늘은 실제로 스케줄러에 적용되는 알고리즘을 하나씩 살펴보자. 1. FCFS / FIFO First-Come, First-Served 이름에서 알 수 있듯이 큐에 들어온 순서대로 실행시켜주는 것이다. 일반적으로 Non-preemptive 하다. 또한, 아무리 앞의 프로세스의 실행시간이 길다고 하더라도 어쨌든 모든 프로세스에게 순서가 돌아가므로 starvation도 없다. 이 알고리즘의 문제로는 convey effect가 있는데, 한마디로 굉장히 실행시간이 긴 프로세스가 앞에 있으면, 뒤에 있는 프로세스들의 turnaround time 이 길어진다는 것이다. 위의 그림에서 첫번째 경우가 대표적인 convoy ..
1. starvation 프로세스 스케줄러는 ready queue에 있는 여러 프로세스들에게 돌아가면서 illusion을 제공해준다. 하지만 모종의 이유때문에 특정 프로세스가 계속해서 CPU에 올라가지못하는 경우가 발생하는데 이 경우를 starvation 이라고 한다. 잘못된 스케줄링 정책으로 인해 starvation이 발생할 수 있다. 2. preemptive scheduling 1) Non-preemptive scheduling - 어떤 프로세스를 CPU에 올렸을 때, 스스로 반환할 때까지 얌전히 기다리는 스케줄러- jobs들이 협력하여 동작한다. 2) preemptive scheduling - 어떤 프로세스가 CPU를 쓰고 있더라도, 상황에 따라 빼았아가는 ..
1. 프로세스 스케줄링이란? 하나의 컴퓨터에서는 여러개의 프로세스가 각자의 address space를 가지고 실행될 수 있다. 만약 processor의 수가 process의 수보다 적다면, 프로세스를 parallel하게 운영하는 것은 불가능할 것이고, concurrent하게 운영해야 할 것이다. 즉, 여러개의 프로세스를 조금씩 돌려가며 실행시켜야 한다는 것이다. 여기서, 다음 프로세스는 뭘 돌릴지, 어디부터 돌릴지, 언제 바꿀지를 결정하는 녀석이 바로 Schedular 이다. 참고로 이 스케줄러는 운영체제에 포함되어 있다. Schedular는 processor에게 각 프로세스의 address space를 매핑해준다. 이를 illusion을 제공해준다고 표현하는데, 왜냐면 각 프로세스가 각자..
쓰레드를 이용하다보면 생길법한 Issues 들에 대하여 한번 살펴보자. 1. fork() 와 exec() 만약 프로세스에 여러개의 쓰레드가 실행중일 때, exec()를 만나면 어떻게될까? 답은 간단하다. 현재 프로세스에 몇개의 쓰레드가 있던간에 그냥 싹 다 밀어버리고, 새로운 프로그램을 하나의 쓰레드로 실행시킨다. 그렇다면 여러개의 쓰레드가 실행중일때, 하나의 쓰레드가 fork()를 만나면 어떻게 될까? 이는 운영체제마다 조금씩 다른데, Pthread에서는 fork()를 부른 쓰레드만 남긴다. 하지만 일부 UNIX International standard에서는 실행중인 모든 쓰레드를 그대로 복사하는 경우도 지원한다. 2. signal Handling 다음으로 만약 멀티쓰레딩 ..