Process
Virtualization(가상화)
resource가 하나이고 사용자도 하나라면, resource를 사용하는데 문제가 발생하지 않는다.
하지만, resource는 하나인데 사용자가 여러명이라면? -> 이런 경우에 사용하는 것이 가상화(Virtualization)이다!
Process
CPU를 공유하기 위해 만든 개념
Running a Process
CPU는 PC(Programm Counter)로 다음 명령어를 찾고, Decode하고, 실행한 뒤, PC를 업데이트 하는 방법을 반복해서 Process를 실행한다
Running Multiple Processes
그렇다면 여러개의 Process를 동시에 하려면 어떻게 해야 할까? -> 간단하다. 여러개의 CPU가 있으면 된다. 하지만, 이 방법은 불가능하다
Interleaving Multiple Processes
또 다른 방법은 번갈아가며 조금씩 실행하는 방법이다.
이 방법이 가능하려면, 각각의 코드들끼리 위치를 알고 있어야 한다. 하지만, 이 방법은 가상화가 아니다(가상화는 서로의 위치를 몰라도 된다)
Virtualizing the CPU
현대의 운영체제 방법이다! 일정시간 수행하다가 OS가 CPU를 뺏어온 뒤, 다른 Process에게 넘겨준다. 이 방식을 빠르게 반복하면, 각각의 Process들은 CPU를 독점중이라고 생각하게 된다.
Process란?
- 실행중인 Program의 instance이다.
- Java에 비교하자면 class는 program, Object는 process에 해당한다
- 각각의 Process는 각각의 PID를 가진다
- Process includes
- CPU context(registers)
- OS resources(address space, open files)
- Other Information(PID, state, owner)
Process Hierarchy
- 하나의 Process는 다른 Process를 만들 수 있다
- Unix에서는 hierarchy를 "process group"이라고 한다
- Window는 부모-자식 Process Hierarchy의 개념이 없다
Process Creation
- 프로그램 코드를 메모리로 읽어온다 -> 요즘은 프로그램의 크기가 너무 커졌고, 동시에 돌아가는 것들이 많아서 필요한 코드만 실시간으로 메모리에 올린다
- 프로그램에 스택이 할당된다
- Heap이 생성된다 -> 동적 메모리. List나 Hashtable, tree 등이 해당된다
- 입출력이 초기화 된다
- 프로그램의 시작점(main)으로 가서 실행된다
Unix에서의 Process Creation
-
fork()
- 기존의 Process를 복제해서 새로운 Process를 만듬
- 대부분의 것을 상속받음
- Parent는 원한다면 Child가 종료할 때까지 wait()을 사용해서 기다릴 수 있음
- shell이나 GUI는 fork()를 이용함
- return이 2번
-
exec()
- 현재 Process 이미지를 교체함
- return을 따로 하지 않음
Process States
- Process의 상태에는 3가지가 있다
- Running
- Ready
- 실행할 준비가 끝나고, CPU를 기다리는 상태
- Blocked
Process State Queues
- Ready queue : 준비 완료된 것을 ready-queue에 넣고 우선순위에 따라 선택한다
- Wait queue : 입력이나 event를 기다리는 block된 것들을 넣는다
Process Termination
- Normal exit : 일반적으로 return을 받았을 때 종료
- Error exit : 에러가 났을 때 종료
- Fatal exit : 문제가 생겼을 때의 강제 종료(segmentation fault 등)
- Killed by another process : 다른 프로세스에서의 종료(리눅스에서의 ctrl+c)
- Zombie process : 종료는 되었지만, 완전히 제거되지 않은 경우
Implementing Processes
- PCB(Process Control Block) : 프로세스의 정보를 모아놓은 자료구조이다. 다음과 같은 정보들이 있다
- CPU registers
- PID, PPID, process group, priority, process state, signals
- CPU scheduling information
- Memory management information
- Accounting information
- File management information
- I/O status information
- Credentials
Context Switch
- Process 사이의 이동이다
- 추가시간이 발생한다
- 실행중이던 Process를 저장하고, 실행할 process를 복구할 시간
- 메모리 캐시를 reloading할 시간
- 동적 메모리를 다시 할당할 시간
- 초당 수백 ~ 수천번씩 발생한다
잘보고 갑니다^^