Virtualization이란
시스템에 존재하는 하나의 자원을 각 프로그램에게 여러 개의 자원처럼 보이게 하는 것이다.
각 프로그램은 하나의 자원을 공유하고 있지만 각자의 자원이 있다는 환상을 갖게 된다.
Processes
프로세스의 개념
프로세스는 실행 중인 프로그램으로 정의한다. 프로그램은 디스크 상에 존재하며 실행을 위한 명령어와 정적 데이터의 묶음을 말한다.
사용자는 하나 이상의 프로그램을 동시에 실행시키기를 원하므로 운영체제는 적은 개수의 CPU 밖에 없더라도, 무한개에 가까운 CPU가 존재한다는 환상을 제공해야한다.
이러한 환상은 가상화를 통해 만들어진다. CPU 가상화는 저수준의 도구인 메커니즘과 고차원적인 지능인 정책으로 구성된다.
모든 현대 운영체제들은 시분할(time sharing) 기법을 사용해 가상화를 만들어낸다.
프로세스의 구성 요소를 이해하기 위해서는 하드웨어 상태(machine state)를 이해해야 한다.
메모리(Address space)와 레지스터는 프로세스의 하드웨어 상태에 포함된다.
메모리는 Code(Text), Data, Stack, Heap 으로 구성되어 있고 레지스터는 Program Counter, Stack Pointer 등으로 구성되어 있다.
프로세스 API
운영체제가 반드시 API로 제공해야 하는 기능은 다음과 같다.
- 생성(Create) : 운영체제는 새로운 프로세스를 생성할 수 있는 방법을 제공해야 한다. 쉘에 명령어를 입력하거나, 응용 프로그램의 아이콘을 더블-클릭하여 프로그램을 실행시키면, 운영체제는 새로운 프로세스를 생성한다.
- 제거(Destroy) : 프로세스 생성 인터페이스를 제공하는 것처럼 운영체제는 프로세스 를 박제로 제거할 수 있는 인터페이스를 제공해야 한다. 물론, 많은 프로세스는 실행되고 할 일을 다하면 스스로 종료한다. 그러나 프로세스가 스스로 종료하지 않으면 사용자는 그 프로세스를 제거하길 원할 것이고, 필요ᨧ는 프로세스를 중단시키는 API는 매우 유용하다.
- 대기(Wait) : 때론 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문에 여러 종류의 대기 인터페이스가 제공된다.
- 각종 제어(Miscellaneous Control) : 프로세스의 제거, 대기 이외에, 여러 가지 제어 기능들이 제공된다. 예를 들어, 대부분의 운영체제는 프로세스를 일시정지하거나 재발 (일시정지되ᨩ던 프로세스의 실행을 다시 시작)하는 기능을 제공한다.
- 상태(Status) : 프로세스 상태 정보를 얻어내는
- 인터페이스도 제공된다. 상태 정보에는 얼마 동안 실행되ᨩ는지 또는 프로세스가 어떤 상태에 있는지 등이 포함된다.
프로세스 생성 : 좀 더 자세하게
1. Load a program code into memory, into the address space of the process. ( 메모리에 코드 적재 )
- 프로그램은 디스크 또는 SSD에 실행 파일 형식으로 저장되어 있다. 코드와 정적 데이터를 메모리에 탑재하기 위해서 운영체제는 디스크의 해당 바이트를 읽어서 메모리에 저장한다.
2. The program's run-time stack is allocated.
- 일정량의 메모리를 run-time stack 용도로 할당시킨다.
- main() 함수의 인자인 argc와 argv 벡터를 사용하여 스택을 초기화한다.
3. The program;s heap is created.
- free(), malloc()
4. The OS do some other initialization tasks.
- 입출력과 관계된 초기화 작업 수행 (ex. 표준 입력 STDIN, 표준 출력 STDOUT, 표준 에러 STDERR 장치에 해당하는 세 개의 파일 디스크립터)
5. Start the program running at the entry point, namely main().
프로세스 상태
- 실행 (Running): 실행 상태에서 프로세스는 프로세서에서 실행 중이다. 즉, 프로세 스는 명령어를 실행하고 있다.
- 준비 (Ready): 준비 상태에서 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중이다.
- 대기 (Blocked): 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시 키는 연산이다. 흔한 예 : 프로세스가 디스크에 대한 입출력 요청을 하였을 때 프로세스는 입출력이 완료될 때까지 대기 상태가 되고, 다른 프로세스가 실행 상태로 될 수 있다.
- + 최종(final)/좀비(zombie) : 프로세스는 종료되었지만 메모리에 남아있다.
자료 구조
운영체제도 일종의 프로그램이므로 다양한 정보를 유지하기 위한 자료 구조를 가지고 있다.
- PCB (Process Control Block) : 각 프로세스의 정보를 담고 있는 자료구조
광운대학교 김태석 교수님 운영체제 수업과
[운영체제 : 아주 쉬운 세 가지 이야기] 책 참고
'21-2학기 > 운영체제' 카테고리의 다른 글
[Virtualizaton] 4. Limited Direct execution (0) | 2022.01.04 |
---|---|
[Virtualizaton] 3. Process API (0) | 2022.01.04 |