•Compter Science/Operating System

    [OS/OSTEP] 09.CPU-sched-lottery : 비례, 배분을 이용한 스케줄링 #6

    [OS/OSTEP] 09.CPU-sched-lottery : 비례, 배분을 이용한 스케줄링 #6

    09.CPU-sched-lottery # 시작하며 비례 배분(Proportional Share) 혹은 공정 배분(fair share)의 개념은 우리가 지금까지 다뤄왔던 스케줄러와는 목적이 다르다. 지금까지는 반환시간이나 응답 시간을 최적화하는 방법으로 스케줄링을 했다면, 비례배분 방식은 CPU의 일정 비율을 실행 할 수 있도록 보장하는 것이 주된 목적이다. 비례 배분 스케줄링의 좋은 예가 추첨 스케줄링(lottery scheduling)라고 한다. 다음 실행될 프로세스를 추첨하여 결정하는데 더 자주 수행되어야 하는 프로세스는 당첨 기회를 더 많이 준다. 이 기법이 과연 효과적인지, 또 어떻게 설계할 수 있는지에 대해서 알아보는 것이 목적이다. # 추첨(lottery)권은 나(작업)의 몫이다. lotter..

    [OS/OSTEP] 08.CPU-sched-mlfq : 멀티 레벨 피드백 큐(MLFQ) #5

    [OS/OSTEP] 08.CPU-sched-mlfq : 멀티 레벨 피드백 큐(MLFQ) #5

    08.CPU-sched-mlfq # 시작하며 멀티레벨피드백큐(Multi-level Feedback Queue, MLFQ)는 기본적으로 두가지 문제를 해결하기 위해 고안 됐다. 첫번째는 짧은 작업을 먼저 실행시켜 반환 시간을 최적화 하려는 것이다. SJF와 STCF도 같은 목적을 띄지만 실행되는 작업시간을 알아야하지만, 그것을 아는 것은 불가능하다. 두번째로는 응답이 빨라보이도록 하는 것이다. RR은 응답시간을 최적화 시켜 응답시간은 매우 빠르지만 반대로 반환시간이 매우 최악이었다. 프로세스의 실행시간에 대한 정보가 없이 이러한 조건을 만족시키는 스케줄러를 고안해보는 것이다. 즉 작업의 대한 정보 없이 반환시간도 빠르고, 응답시간도 빠른 스케줄링을 해보자는 것이다. # MLFQ : 기본 규칙 MLFQ는 우..

    [OS/OSTEP] 07.CPU-sched : CPU 스케줄링 정책(scheduling policy) #4

    [OS/OSTEP] 07.CPU-sched : CPU 스케줄링 정책(scheduling policy) #4

    07.CPU-sched # 시작하며 앞선 06포스팅 에서는 어떻게 cpu가 가상화하여 다중작업을 수행하는지에 대해서 알아 봤다면, 어떻게 그 다음 프로세스를 결정하는지에 데해서 알아보도록 한다. 즉 스케줄링 정책(scheduling policy)에 대해서 알아본다. 처음에는 초창기에 방식부터 점점 많은 요소들을 고려해가며 현대의 접근방법에 대해서 알아본다. 그렇기 때문에 처음에는 여러 가정을 통해서 조금 특별한 요소들을 제한하고 그 요소들을 하나씩 없애는 방식으로 설명한다. # 워크로드에 대한 가정 일련의 프로세스들이 실행하는 상황을 워크로드(Workload)라고 한다. 일단 지금은 많은 특별한 케이스들을 배제하는 가정을 세워야 했다. 하나씩 지워나가며 이 포스팅이 끝날때는 마지막 5의 가정 한개만 남게..

    [OS/OSTEP] 06.CPU-mechanisms : 제한적 직접 실행 원리 #3

    [OS/OSTEP] 06.CPU-mechanisms : 제한적 직접 실행 원리 #3

    06.CPU-mechanisms : 제한적 직접 실행 원리 # 시작하며 여러 작업들이 동시에 실행되는 것처럼 보이게 하기 위해서 CPU를 가상화 해야한다. 이렇게 가상화된 CPU들은 동시에 실행되는 것처럼 보이지만 실제로는 물리적인 CPU를 공유하고 있는 것이다. 즉 돌아가면서 쓰고 있다는 것이다. 잠깐씩 실행시키면서 번걸아 쓰는 이러한 방식을 시분할방식(Time sharing)이라고 했었다. 이렇게 시분할방식을 사용하면 두가지 문제가 생긴다. 첫번째는 성능에 관한 이슈이다. 나눠쓴다는 것은 하나를 계속 쓸때보다는 성능 저하가 일어날 수 밖에 없다. 어떻게하면 과중한 오버헤드를 주지 않고 가상화를 구현 할 수 있을까? 두번째는 제어문제이다. CPU를 나눠쓰끼 때문에 제어를 명확히 하지 않으면, A프로세스..

    [OS/OSTEP] 05.CPU-API 프로세스 API #2

    [OS/OSTEP] 05.CPU-API 프로세스 API #2

    05. CPU-API , # 시작하며 UNIX 시스템에서 프로세서를 생성하기 위해선 fork() 와 exec()를 사용한다. wait()를 생성하면 자신이 생성한 자식프로세서의 종료를 기다린다, 자식의 프로세서가 종료된다면 그 다음 코드들이 시작된다. 위의 시스템콜(syscall)을 사용하여 프로세스를 생성하고 제어하는 방법에 알아본다. 시스템 콜에대해서는 아마 다음장에서 나오는 것으로 기억하는데, 쉽게 말해 더 낮은 레벨에서 사용할 수 있는 명령어들이다. 이 명령어를 남발하면 해당 프로세스 뿐 아니라 모든 메모리에 접근할 수 있기 때문에 매우 위험하기 때문에 분리시켜 놓은 특수한 명령어 이다. 이 명령어는 운영체제가 실행한다고 생각하면 된다. # fork() 시스템 콜 결과를 보기전 간단하게 fork(..

    [OS/OSTEP] 04.CPU-intro 프로세스의 개념 #1

    [OS/OSTEP] 04.CPU-intro 프로세스의 개념 #1

    04-CPU-Intro, 프로세서의 개념 # 시작하며 운영체제는 프로세스(process)라는 핵심적인 개념을 제공한다. 프로세스는 "실행 중인 프로그램"이라고 생각하면 쉽다. 프로그램과 프로세서는 명확히 구분된다. 프로그램은 생명이 없는, 디스크상에 존재하는 명령어와 데이터 묶음일뿐이다. 쉽게 생각하면 우리는 바탕화면에서 파일을 클릭하여 실행한다. 아직 바탕화면에 남아있는 순간은 프로그램이며, 이 프로그램이 실행되는 순간이 프로세서인 것이다. 운영체제는 이렇게 프로그램이 프로세서가 되기 위한 동작을 도와준다. 우리는 게임을 하면서 노래를 듣기도 하며, 코딩을 하면서 인터넷 검색도 한다. 하나 이상의 프로세서가 동작하고 있는 것이다. 이런 프로세서 말고도 우리가 모르는 수많은 프로세서들이 행해지고 있다. ..