위 포스트는 udacity의 Introduce to Operating Systems by Geogia Tech 를 참고하였습니다.
추가로 이 곳 을 참고하였습니다.
1) Process Life Cycle
1-1. Overview
-
New : 새 프로세스가 생성될 때
- OS : Admission Control
- 허용된 Process라고 판단되면, 새 PCB를 생성해서 메모리에 할당함.
- Ready State로 이동함
-
Ready : 실행을 준비하는 단계
- 스케쥴러가 Running state로 이동시킬 때 까지 기다림
-
Running : CPU 권한을 부여받아서 실행되는 단계
-
Interrupted : Context Swtich를 통해서 Ready로 돌아옴.
-
Initiate longer operation
- like as I/O
- Event wait (ex, 타이머, 키보드 인풋 기다림)
이 상태에서는 기다리기 위해서 Waiting State로 이동함.
-
프로세스의 작동이 끝나거나, 에러가 발생하면 종료됨.
-
-
Waiting : 긴 operation을 수행하기까지 기다리는 단계
- 작동이 끝나면 다시 ready state로 돌아옴
1-2. Creation : 프로세스의 생성과정
OS는 프로세스를 생성하는 과정을 담당하며, 각 프로세스들은 Tree구조로 되어 있습니다.
-
- Root process
-
가장 중요한 프로세스들이며, 시스템이 부팅될 때 잠깐 느려지는데,
이 시간동안에 Root process를 생성합니다.
-
- Shell process
-
유저가 로그인하면 shell 프로세스를 생성하며, 커맨드를 입력하면 그에 따른 child process를 생성합니다.
-
Mechanisms for process creation
프로세스가 만들어지면 두개중에 하나가 실행됨
-
FORK
부모의 PCB를 카피해서 생성된 자식의 PCB에 복사해줌.
child continues execution at instruction after fork
- 왜냐하면 부모와 자식 둘다 PCB에서 동일한 값을 가지니까
- 그 값중에서 Program counter도 포함되어있으니까 => 부모와 자식 둘다 동일한 위치에서 프로세스를 시작하게 되는것이다!
물론 완벽히 모든 것을 복사하는건 아니라고함!
ex) process id가 다름 -> fork의 리턴값으로 child 프로세스는 0을 얻고, 부모는 child 프로세스의 id를 리턴한다고 하는데
-
EXEC
현재 프로세스를 new program으로 대체하는 방식.
current process space로 새로운 프로그램을 로드하고, 그 시작 포인트에서 프로세스를 실행하게 하는 것이다.
child PCB의 PC가 new program의 first instruction의 주소로 맞춰지는 것임.
-
+--------+
| pid=7 |
| ppid=4 |
| bash |
+--------+
|
| calls fork
V
+--------+ +--------+
| pid=7 | forks | pid=22 |
| ppid=4 | ----------> | ppid=7 |
| bash | | bash |
+--------+ +--------+
| |
| waits for pid 22 | calls exec to run ls
| V
| +--------+
| | pid=22 |
| | ppid=7 |
| | ls |
V +--------+
+--------+ |
| pid=7 | | exits
| ppid=4 | <---------------+
| bash |
+--------+
|
| continues
V
1-3. Role of the CPU scheduler
프로세스 레디
문제점 : 여러개의 프로세스가 레디 큐에 있을 수 있음.
어떤 프로세스를 다음에 cpu에 붙여줄것인가?
=> CPU scheduler가 해줌.
-
OS의 컴포넌트
-
CPU 리소스를 어떻게 관리할지를 도와줌
-
역할
-
어떤 프로세스를 다음에 실행시킬지 선택해줌
-
CPU에서 프로세스를 작동할 수 있게 프로세스를 붙여줌.
-
얼마나 이 프로세스가 작동할지를 정해줌.
=> Timer interrupt
-
-
필요 요건
-
preempt
프로세스 중지 + 현재 위치 저장
-
schedule
스케쥴링 알고리즘 작동
ex) 스케쥴링 기준 : 이전에 얼마나 동작한 프로세스인가, 프로세스의 우선순위
-
dispatch
선택된 프로세스를 cpu에 붙여주며, context switch를 함.
-
-
1-4. Length of Process
이번 시간에는 CPU의 효율에 대해서 알아보도록 합시다.
CPU의 효율을 정하기 위해서는 다음과 같은 두 요소가 필요합니다.
-
T-sched : Process Scheduler가 preempt, schedule, dispatch를 하는 시간
-
Tp : dispatch된 프로세스가 CPU 위에서 할당되어 있는 시간
timeslice라고 부르기도 합니다.
-
CPU work
= (Total processing time / Total duration of interval)
= Tp / (Tp + T-sched)
그렇기 때문에 CPU가 효율적으로 작동하기 위해서는 스케쥴링 시간을 프로세스 작동 시간에 비해서 줄일 필요가 있습니다.
하지만, 스케쥴링 시간을 줄이려고 알고리즘을 단순한 것을 사용한다면 중요한 프로세스를 뒤늦게 실행시키는 참사가 벌어질 수도 있습니다.
그렇기 때문에 스케쥴링을 디자인하기 위해서는 다음 두 가지를 명심해야 합니다.
Scheduling Design Decisions
- timeslice를 적절히 정하는 방법
- 다음 프로세스를 정할 알고리즘(metric)
1-4 What about I/O?
이번 시간에는 I/O operation이 스케쥴링에 영향을 어떻게 미치는지에 대해서 알아보도록 하겠습니다.
-
-
OS는 여러 I/O unit(키보드, 마우스, 장치관리자 등등…)들을 관리함
-
Driver Communication : I/O 시스템은 어플리케이션의 I/O 요청을 받고, 이걸 physical device에 보내는 작업을 수행함 -> 그 device는 작업을 수행한 결과를 다시 어플리케이션에 배달을 해줘야함.
-
I/O 장치
-
Block devices : Driver Communication을 위해서 데이터 전체를 보냄
(ex, 하드디스크)
-
Character devices : 몇개의 char만 주고받으면서 소통함.
(ex, 포트)
-
-
Device driver & Device controller
-
Device controller
-
Device안에 있는 electronic component
-
Device <-> Socket <-> Device controller 의 연결구조를 가짐.
- 특정 Software input 을 받아서, 하드웨어가 이해할 수 있는 input으로 번역함 : CPU나 메모리에서 디바이스와 OS간의 중재자 역할
- 이런 식으로 하나의 창구를 가지고 여러 Controller들과 CPU가 소통함.
-
-
Device driver
- 특정 디바이스를 다루기 위해서 OS와 연결된 모듈(코드)
- 커널 모듈에 의해서 로드되고, 커널에게 특정 디바이스를 다루는 방식에 대한 지식을 제공함.
-
-
-
- 프로세스가 I/O request를 생성함.
- 생성된 I/O request를 driver에 배달함.
- 그렇게 배달된 I/O request를 처리하는 동안에 process를 I/O queue에 넣어서 기다리게 함.
- 디바이스가 I/O request를 끝내면, 이제 그 process는 다시 다음 실행을 위한 준비를 위해 ready queue에 넣음.
-
Ready queue에 프로세스가 들어가기 위한 여러 방법들
- I/O request
- time slice expired
- fork a child (create process)
- interrupt occured
2) Inter Process Communication
어플리케이션은 여러 프로세스들의 구조로 이루어져있고,
성능 향상을 목적으로, OS는 이런 프로세스들간의 교류를 허용합니다.
그것을 Inter Process Communication이라고 합니다.
2-1. Inter Process Communication
-
Transfer Data&information between address spaces
-
maintain protection and isolation
- 프로세스의 주소공간 분리
- 각 프로세스마다 cpu 할당량을 정함???
- 어떤 메모리에 할당할건지, 어떤 프로세스를 허용할것인지
-
provide flexibility and performance
ex) perodic data exchange, continue stream up data flow between the processes, share single picece of information
2-2. Message - Passing IPC
두 프로세스가 교류하기 위한 communication channel(ex, shared buffer)을 둠.
이 버퍼를 통해서 메시지를 보내거나, 받음
-
이 버퍼는 OS가 관리하기 때문에
OS가 늘 하는 system call을 통해서 I/O와 같은 주요 operation들을 관리할 수 있음.
-
그렇기 때문에 overhead가 일어날 수 있음.
왜냐하면, User process에 있는 message를 카피한 다음에 채널에 보내야 하기 때문입니다.
2-3. Shared Memory IPC
OS가 shared memory channel을 만들어줌.
이 channel은 두 프로세스의 address channel을 맵핑해줌.
- 프로세스는 이 채널을 통해서 다른 프로세스의 virtual address에 직접적으로 접근할 수 있기 때문에 데이터를 복사해서 보낼 필요가 없음.
- OS가 더이상 관여하지 않기 때문에 에러가 더 잘 생길 수 있음.
2-4. 추가적인 내용, 출처 : 위키피디아
-
공유된 데이터를 관리하기 위해서 프로세스에게 권한을 주는 메커니즘
-
client, server로 나눠져있음
- client : 데이터 요청
- server : 클라이언트의 요청에 반응
=> distributed computing에서 자주 보여짐
-
IPC를 위한 방법
- software requirements - performance, modularity requirments
- system circumstances - network bandwidth(대역폭), latency(잠재?)
-
마이크로커널, 나노커널을 디자인하기 위해서 매우 중요함
-
마이크로커널 : 커널의 전유물이었던 몇개의 기능을 제거
-> 이런 기능들은 각 서버들간의 ipc를 통해서 극복가능.
-