Skip to content
Go back

[OSTEP]Virtualization-Process

Edit page

Process

Process 는 실행 중인 프로그램이다. 실제 우리는 운영체제에서 여러개의 프로그램을 동시에 실행시키는 데 이는 어떻게 가능한 것인가?
CPU를 Virtualize(가상화) 하여서 CPU가 여러개 인 것 처럼 생각하게 한다. 가상화 기법으로 CPU는 Time Sharing(시분할, 흔히 사용됨), Space Sharing(공간분할)을 사용한다.

Concept

위에서 말했듯이 Process는 실행중인 프로그램이다. 명령어와 정적 데이터로 디스크에 존재하나 이 자체로는 의미를 갖지 않으며 운영체제가 이에 생명을 불어넣어준다.

구성 요소

Process API 구성

간단한 Process API 역할을 기록합니다.

Process 생성 과정

  1. 운영체제는 Process 생성을 위해 디스크에서 프로그램, 정적 파일을 Load 하여 메모리에 저장한다.
  2. 프로그램 시작 전 run-time 용으로 Stack이 할당되어야하고, Heap 메모리를 할당한다.
  3. 입출력 File Descriptor인 STDIN, STDOUT, STDERROR 를 초기화한다.

위 3단계를 거쳐서 Process가 생성되어 main()함수에서 분기하여 시작된다.

최근 현대 운영체제에서는 Paging 과 Swapping 을 통해 필수적인 데이터만 메모리에 Load한다.

Process 상태


1. 프로세스 상태 추이: CPU만 이용할 때

시간Process0Process1비고
1실행준비
2실행준비
3실행준비
4실행준비Process0 종료
5실행
6실행
7실행
8실행Process1 종료

2. 프로세스 상태 추이: CPU 이용과 입출력 작업을 할 때

시간Process0Process1비고
1실행준비
2실행준비
3실행준비Process0이 입출력을 시작한다.
4대기실행Process0은 대기 상태가 되고,
5대기실행Process1이 실행된다.
6대기실행
7준비실행Process0 입출력 종료
8준비실행Process1 종료
9실행-
10실행-Process0 종료

자료구조 - Process 관리

운영체제(OS)가 시스템에서 실행 중인 **프로세스(Process)**들을 효율적으로 관리하기 위해서는 내부적으로 특정한 자료 구조들을 활용합니다. 이 자료 구조들은 프로세스의 상태와 문맥 정보를 저장하고, CPU 가상화의 핵심 메커니즘인 **문맥 교환(Context Switch)**을 가능하게 하는 기반을 제공합니다.

Process List

운영체제는 시스템 내의 Process 관리를 위해 Process List라는 자료구조로 관리한다.

PCB(Process Control Block)

PCB는 Process 관리하기 위한 중요정보를 담고 있음.
예를 들어, xv6에서 proc이라는 구조체를 활용한다.

주요 정보 필드내용
레지스터 문맥 (register context)프로세스가 중단되었을 때 해당 프로세스의 레지스터 값들(PC, 범용 레지스터 등)을 저장합니다. 문맥 교환 시 이 정보가 복원되어 실행을 재개합니다.
프로세스 상태 (state)프로세스가 현재 어떤 상태(UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE 등)에 있는지를 나타냅니다.
프로세스 ID (pid)프로세스의 고유 식별자입니다.
메모리 관련 정보프로세스의 주소 공간 크기 (sz), 커널 스택(kstack), 그리고 메모리 시작 주소(mem) 등의 메모리 관련 정보가 포함됩니다.
기타 정보부모 프로세스 포인터, 파일 디스크립터 목록 (ofile), 현재 작업 디렉터리(cwd), 트랩 프레임 (tf) 등이 포함됩니다.

문맥 교환을 위한 정보 저장

PCB 내에 저장된 레지스터 문맥 정보는 운영체제가 CPU 가상화를 구현하는 데 결정적인 역할을 한다.

프로세스 상태와 종료 관리

PCB는 프로세스의 생명 주기 전반을 관리하는 데 사용된다.


Edit page
Share this post on:

Previous Post
[OSTEP]Virtualization-Process API
Next Post
[Node.js] setImmediate에 대하여