CPU Virtualization - The Abstraction : The Process
운영체제는 많은 수의 virtual CPU가 존재하는 것과 같은 착각을 줄 수 있다. 이것은 Time sharing을 통해 이루어진다.
- Time Sharing : 한 프로세스를 돌리고, 잠깐 멈춰두고 다른 프로세스를 돌리고,, 반복
- 근데 이렇게하면 CPU에서 돌릴 프로세스를 바꿀 때 발생하는 context swiching에 의한 오버헤드가 있음..
Process
프로세스는 실행되고 있는 프로그램이다.
프로세스의 구성요소는 다음과 같다.
- CPU state (레지스터)
- Program counter
- Stack pointer
- General registers
- Memory (address space)
- instructions
- data section

- IR (Instruction Register) : instruction이 불려와서 저장되는 레지스터
- eip (Instruction pointer, IP) : 다음 instruction을 가리키는 포인터
메모리의 한 부분에는 수행될 프로그램의 instruction들이 저장되어있다.
eip가 가리키는 메모리주소에서 다음 instruction을 가져와 IR에 저장하고 해당 instruction을 수행하는 방식으로 프로그램이 실행된다.

Process API
OS에서 제공되는 Process관련 API들은 다음과 같다.
- Create : 프로그램을 실행시키기 위한 새로운 프로세스 생성
- Destroy : 프로세스를 중단
- Wait : 프로세스가 실행을 중단하기를 기다림
- Status : 프로세스에 관한 상태정보를 얻음
Process Creation
프로세스 생성과정에 대해 좀 더 자세히 알아보자
1. 메모리로 프로그램 코드를 load 해온다.
- 프로그램은 처음에 executable 형식으로 디스크에 저장되어있음.
- OS는 프로세스의 로딩을 lazy하게 수행 (프로그램 수행 중 실제로 필요해질때 읽어들임)
2. 프로그램의 Stack 을 할당한다.
- 스택은 지역변수, 함수 파라미터, 리턴어드레스를 위한 것임
- main함수의 argc, argv 인자를 통해 스택을 초기화함.
3. 프로그램의 Heap을 생성한다.
- 명시적으로 요청된 동적할당 데이터를 위해 사용됨 (malloc, free)
4. 다른 초기화 작업들 수행한다.
- I/O 설정 : 각 프로세스는 기본적으로 Standard input/output/error의 세가지 open file descriptor를 가짐
5. main()이라고 명시된 entry point부터 프로그램을 시작한다.
- main의 첫 instruction이 시작되는 주소를 eip에 넣어주면 여기까지가 운영체제의 역할이고, 이후부터는 CPU의 컨트롤을 새롭게 생성된 프로세스에게 넘겨줌.
Process States
프로세스는 다음 세가지 상태 중 하나일 수 있다.
1. Running : 프로세스가 실제 CPU에서 돌고 있는 상태
2. Ready : 여러가지 이유에 의해 OS에 의해 스케줄링되지않아서 지금은 돌고있지 않지만 언제든 실행될 수 있는 상태
3. Blocked : I/O나 네트워크 등의 작업이 끝나지 않아 다음 instruction을 실행할 수 없는 상태
PCB (Process Control Block) : 운영체제가 프로세스를 표현한 구조체
- OS가 각 프로세스에 관한 다양한 정보들을 담기 위해 사용하는 구조체
- 프로세스는 CPU state + 메모리 state 정보로 이루어지므로 해당 정보들을 PCB에 담아놔야한다.
- 그래야 실행되던 프로세스를 잠깐 멈추고 schedule-out 시킨 후 나중에 다시 스케줄링을 통해 실행시키더라도, 하던 일을 그대로 이어나갈 수 있으니까
xv6 의 Proc 구조체(PCB)는 다음과 같다.


왼쪽 proc구조체의 mem 을 통해 메모리 상태를 저장해놓고, context 를 통해 CPU 상태를 저장할 수 있다.
그리고 Context는 오른쪽과 같은 구조체로 이루어져있으며, 프로세스의 상태를 복구시키는데 필요한 레지스터들이 저장되어있다.
'운영체제' 카테고리의 다른 글
| 06. 운영체제 - Memory Virtualization(1) (0) | 2023.01.24 |
|---|---|
| 05. 운영체제 - CPU Virtualization - Stride scheduling (4) (0) | 2023.01.20 |
| 04. 운영체제 - CPU Virtualization - MLFQ(3) (0) | 2023.01.20 |
| 03. 운영체제 - CPU Virtualization (2) (0) | 2023.01.20 |
| 01. 운영체제 Intro (2) | 2022.10.03 |