📌 프로세스의 개념
- Process is a program in exectuion
: 실행 중인 프로그램 - 프로세스의 문맥(context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 주소 공간 (메모리와 관련)
- code, data, stack : code, data, stack 에 어떤 내용이 담겨있는가?
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- Kernel stack
- CPU 수행 상태를 나타내는 하드웨어 문맥
- 그림 안에서의 PC: Program Counter
- R1, R2 ... : Register
- 프로그램의 상태를 알 수 있는 것이 문맥이다. (현재 상태를 나타내는 것)
- 프로그램이라는 것은 CPU를 잡고 매시간 instruction 을 실행 한다.
- 프로그램이 하나 실행될 때마다 커널은 data 영역에 프로그램당 하나의 PCB 를 두고 있다. (이 친구한테 CPU를 얼마나 줘야 할 지, 메모리한테 얼마나 줘야할 지 등을 관리하는 역할)
- 프로세스 context를 알기위해선 CPU 상태, 메모리 상태도 알아야 하지만, 운영체제가 이 프로세스를 어떻게 평가하고 있는 지도 알아야 한다.
- 커널 스택은 프로그램 별로 두고 있다. (어떤 프로그램이 커널을 호출했는 지 알기 위해서)
📌프로세스의 상태(Process State)
- 프로세스는 상태(State)가 변경되며 수행된다
- Running
- CPU를 잡고 instrutcion을 수행 중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태 (ex. 오래걸리는 I/O 작업)
- Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex) 디스크에서 file을 읽어 와야 하는 경우
- Running
- New: 프로세스가 생성 중인 상태
- Terminated: 수행(execution)이 끝난 상태 (프로세스가 끝나기 직전에 정리하는 상태, 프로세스가 끝나면 그냥 프로세스가 끝난 것임)
- CPU 는 1개가 있다고 가정
- CPU 를 잡고 있는 프로세스는 1개 => 해당 프로세스를 running 이라고 함
- CPU 를 잡기 위해 기다리고 있는 상태 => ready
CPU를 잡기 위한 모든 상태를 만족하고 있어야 한다.
- 프로세스는 크게 3가지 상태가 있다고 생각하면 된다. (Running, Ready, Blocked)
📌프로세스 상태도
- I/O or event wait : 자진해서 wating 처리 하는 것
- Timer interrupt: 강제로 CPU 뺏기는 경우
📌프로세스 상태
📌Process Control Block(PCB)
< PCB >
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 다음의 구성 요소를 가진다(구조체로 유지)
- OS가 관리상 사용하는 정보
- Process state, Process ID (마지 추민번호 같은 것)
- scheduling information, priority
- CPU 수행 관련 하드웨어 값
- Program counter, registers
- 메모리 관련
- Code, data, stack 의 위치 정보
- 파일 관련
- Open file descriptors...
- OS가 관리상 사용하는 정보
📌 문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세서의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- system call 이나 interrupt 발생 시 반드시 context switch 가 일어나는 것은 아님
(1)의 경우에도 CPU 수행 정보등 context의 일부를 PCB에 save해야 하지만 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 큼
ex) cache memory flush (캐시 초기화) => 상당한 오버헤드
- 프로세스 진행 중에 system call 이나 interrupt 가 발생해서 CPU가 사용자 프로세스에서 커널로 넘어가는 것을 context switch라고 하는 것이 아니다. 프로그램 A 에서 프로그램 B 로 넘어가는 것이 context switch이다.
- 만약 system call 이나 interrupt 가 발생해서 프로그램 자체가 넘어가는 경우가 있는데 이 경우는 context switch가 맞다
- ISR: interrupt service routine
📌 프로세스를 스케쥴링하기 위한 큐
1) Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
2) Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
3) Device queues
- I/O device의 처리를 기다리는 프로세스의 집합
프로세스들은 각 큐들을 오가며 수행된다.
📌 스케쥴러(Scheduler)
1) Long-term scheduler(장기 스케쥴러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue 로 보낼지 결정
- 프로세스에 memory(및 각종 자원)을 주는 문제
- degree of Multiprogramming을 제어
- time sharing system 에는 보통 장기 스케쥴러가 없음 (무조건 ready)
- 스케쥴러: 순서를 정하는 것
- 어떤 프로세스를 메모리에 올릴 지 결정하는 것(프로세스 new 상태 -> ready queue 로 보내는 것)
- Multiprogramming: 메모리에 여러 프로그램이 올라가는 것
- degree of Multiprogramming: 메모리에 올라가는 프로그램의 수를 제어하는 것 (메모리에 올라가는 프로그램의 수가 10이라면 degree of Multiprogramming 가 10이 되는 것)
- 메모리에 프로그램이 너무 적어도 문제고 메모리에 프로그램이 너무 많아도 성능이 좋지 않아짐
- ex) 메모리에 프로그램이 1개: 해당 프로그램이 I/O 를 하러 가게 되면 CPU는 놀고 있게 된다. => BAD
- 보통 우리가 쓰는 시스템에서는 장기 스케쥴러가 없음
2) Short-term scheduler(단기 스케쥴러 or CPU shceduler)
- 어떤 프로세스를 다음번에 running 시킬 지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함(millisecond 단위)
3) ⭐Medium-term scheduler(중기 스케쥴러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어
- 일단 메모리에 다 올려놓고 너무 많으면 몇 개를 디스크로 쫒아내는 방식
- 중기 스케쥴러 때문에 추가된 프로세스의 상태 => Suspended (stopped)
📌 프로세스의 상태(Process State) - new version
- Running
- CPU를 잡고 instrutcion을 수행 중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태 (ex. 오래걸리는 I/O 작업)
- Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex) 디스크에서 file을 읽어 와야 하는 경우
- Suspended (stopped) : 중기 스케쥴러 때문에 생긴 개념(메모리를 빼앗긴 상태)
- 외부적인 이유로 프로세스의 수행이 정지된 상태 / 프로세스를 강제로 정지 시킴
- 프로세스는 통쨰로 디스크에 swap out 된다
- ex) 사용자가 프로그램을 일시 정지시킨 경우(break key)
시스템이 여러 이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)
Blocekd: 자신이 요청한 event가 만족되면 Ready
Suspended: 외부에서 resume 해 주어야 Active
- Running, Ready, Blocked 는 CPU 를 넓게 생각하면 기다리는 상태. Blocked는 I/O 와 같이 시간이 오래걸리는 작업 때문에 CPU가 다른 일을 하고 있다.
- Suspended: 프로그램 통째로 정지시킨 상태. 메모리에서 쫒겨남
- 외부적인 이유는 중기 스케쥴러가 될 수도 있고 사람이 될 수도 있다.
📌 프로세스 상태도 - new version
- Running(user mode): 프로세스가 일하고 있는 상태
- Running(monitor mode): 시스템 콜, 인터럽트, 트랩등에 의해 커널이 일하고 있는 상태
❗실질적으로 커널이 일하고 있지만 커널이 Running 하고 있다는 아님! 해당 프로세스가 여전히 Running 중이라고 표현
(운영체제가 running 하고 있다라는 표현 자체는 잘 쓰지 않는 표현)
- 위의 active: CPU를 사용하고 있거나 기다리고 있거나 I/O를 하기위해 Blocked 되거나 일을 하는 상태
- 아래의 inactive: 프로세스가 정지되어 있는 상태
- suspended 상태에서도 blocked 에서 ready 로 바뀔 수는 있다. (I/O 작업이 진행 중이었다 끝나면 ready 로 전환 된다)
참고 강의:
http://www.kocw.net/home/search/kemView.do?kemId=1046323
운영체제
운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각
www.kocw.net
이화여자대학교 반효경 교수님의 운영체제 강의