Chapter 3. Processes

송승윤·2025년 10월 16일

운영체제 정리

목록 보기
2/10

Process

Definition

간단히 프로세스는 실행 중인 프로그램임
프로그램은 디스크에 저장된 명령어 목록이 포함된 파일과 같은 수동적인 엔티티임
프로세스는 다음 실행 명령어를 지정하는 프로그램 카운터와 관련된 리소스 세트를 가진 활성 엔티티임

Process in Memory

메모리 공간에서의 process는 4가지로 나뉜다

Text section
머신 코드 형태의 프로그램 코드
Data section
전역 변수(uninitialized and initialized)
Stack section
일회성 데이터(함수 파라미터, 리턴 주소, 로컬 변수 등등)
buffer의 할당 여부에 따라 늘거나 줄어들 수 있음
Heap section
런타임 중에 동적으로 할당된 메모리
얘도 동적 할당 여부에 따라 늘거나 줄어들 수 있음

참고로, main memory는 고정된 kernel의 공간이 따로 존재하고 그 남은 공간을 user가 process로 채울 수 있음

예시를 보자.
int x;ㅤㅤㅤㅤㅤㅤㅤㅤ값이 없는 전역 변수니까 (uninitialized) data section
int y = 15; ㅤㅤㅤㅤㅤ값이 있는 전역 변수니까 (initialized) data sectionㅤㅤㅤ
argc, agrv ㅤㅤㅤㅤㅤ함수 파라미터니깐 main과 함께 stack section
int *values, int iㅤ로컬 변수니깐 stack section
malloc 어쩌고 ㅤㅤㅤㅤ동적 할당이니깐 heap section
코드 전체 ㅤㅤㅤㅤㅤㅤ코드니깐 text section

참고로 include한 외부 라이브러리는 디스크에 저장됨!

Process State

Process State는 5가지로 나눌 수 있다.

New 프로세스가 생성되고 있음
Running 명령어가 실행 중
Waiting 이벤트가 발생하기를 기다림
Ready 프로세서에 할당되기를 기다림
Terminated 프로세스 실행이 완료

State Change

new → ready
admitted: OS가 새 프로세스를 준비 큐에 등록함

ready → running
scheduler dispatch: 스케줄러가 프로세스를 CPU 코어에 할당함

running → ready
interrupt가 들어옴
인터럽트는 하드웨어 인터럽트일 수도 있고, 소프트웨어 이벤트일 수도 있음.

running → waiting
I/O or event wait: 실행 중 I/O 요청을 만나거나 이벤트가 생김

waiting → ready
I/O or event completion: 기다리던 I/O or 이벤트가 완료

running → terminated
exit: 프로세스가 실행을 마치면

Process Control Block

프로세스의 정보를 관리하는 데이터 구조
여기에는 process state, program counter, register등등 프로세스에 관한 것들이 들어있음

Process Scheduling

프로세스 스케줄러는 CPU 코어에다가 사용가능한 프로세스를 선택해 할당함
CPU를 야무지게 쓰기 위해 최대한 빠르게 다음 프로세스를 CPU 코어로 할당하려고함

그래서, 프로세스들을 큐에다가 놓는데 Ready QueueWait Queues가 있음

Ready Queue
메인 메모리에서 실행을 기다리는 모든 프로세스들이 있는 큐

Wait Queues
이벤트를 기다리는 프로세스들이 있는 큐
얘는 보통 여러개라서 s를 붙인다고 함

이건 Queueing Diagram

Context Switch

Context Switch는 CPU가 실행하던 기존 프로세스를 다른 프로세스로 바꿀 때 생김

interrupt나 system call이 발생하면 register에 있던 P0의 정보를 memory로 백업함
담엔 memory에서 P1의 정보를 register로 복원함

Context Switch 시간은 순수 오버헤드이므로 OS랑 PCB가 복잡해지면 시간이 늘어나서 안 좋음

Process Creation

트리마냥 부모 프로세스는 자식 프로세스를 생성하고 자식은 또 다른 자식 프로세스를 생성함
얘네들은 pid(process identifier)에 의해 관리됨
일종의 system call

설정에 따라 리소스 공유, 시행-종료 순서, 주소 공간 옵션이 달라짐

예를 들면, 밑에 그림처럼 동작함

parent가 fork()로 새로운 자식 프로세스를생성하고 wait()으로 자식의 결과를 기다림
child는 fork() 후에 새로 생겨서 exec()으로 시행되다가 exit()하면서 죽음
parent는 child가 죽고 wait()이 끝나서 계속 시행됨

코드로 짜면 이런식

Process Termination

프로세스는 마지막 명령어를 끝으로 운영체제에 삭제를 요청함
child에서 parent로 데이터가 반환되고 운영체제는 리소스 할당을 해제함

parent는 abort()로 child 프로세스 시행을 종료할 때도 있음
리소스 초과, 그냥 필요없거나, parent가 종료되어야 해서 등이 그 이유

process termination에 관한 child의 상태들은 다음과 같다.

zombie child가 종료됐는데 parent가 wait()을 호출안함
orphan parent가 wait()을 호출안하고 그냥 죽어버림

Interprocess Communication(IPC)

프로세스는 정보 공유, 계산 속도 증진, 모듈화 등의 이유로 협력할 수도 있음
이 때 필요한게 IPC임

Shared memory 방식과 Message passing 방식이 있음

Shared Memory

통신은 운영체제가 아닌 user process의 통제 하에 있음
주요 이슈는 프로세스가 동기화할 수 있는 매커니즘을 제공하는 것

Message Passing

SendReceive로 메시지를 주고 받음

Direct or Indirect 받는 사람을 지정하는 것의 차이(우편함 같은 느낌인듯)
Synchronous or Asynchronous 동기 비동기

0개의 댓글