개발 공부

손승열(Son Seungyeol)

[운영체제][OSTEP] 프로세스

프로세스가 무엇인지에 대해 공부해봅니다.

손승열(Son Seungyeol)
[운영체제][OSTEP] 프로세스

1️⃣ 프로세스의 개념

프로세스(process): 실행 중인 프로그램

하드웨어 상태(machine state) : 프로그램이 실행되는 동안 하드웨어 상태를 읽거나 갱신

  • 메모리(주소 공간(address space)): 프로세스 구성요소로, 명령어와 실행 프로그램이 읽고 쓰는 데이터가 저장

  • 레지스터(register): 많은 명령어들이 레지스터를 직접 읽거나 갱신

    • 프로그램 카운터(program counter, PC): 프로그램의 어느 명령어가 실행 중인지를 알려줌

    • 스택 포인터(stack pointer) & 프레임 포인터(frame pointer): 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때 사용하는 레지스터


2️⃣ 프로세스 API

  • 생성(Create): 운영체제는 새로운 프로세스를 생성

  • 제거(Destroy): 스스로 종료하지 않는 프로세스 혹은 필요없는 프로세스를 중단

  • 대기(Wait): 어떤 프로세스의 실행 중지를 기다릴 필요가 있으므로 여러 종류의 대기 인터페이스 제공

  • 각종 제어(Miscellaneous Control): 프로세스 일시정지, 프로세스 재개 등 제공

  • 상태(State): 실행 시간 등 프로세스 상태 정보를 얻어내는 인터페이스 제공


3️⃣ 프로세스 생성: 조금 더 자세하게

아래 질문에 대한 답들을 찾아보자

  • 프로그램이 어떻게 프로세스로 변형되는가?

  • 운영체제는 어떻게 프로그램을 준비하고 실행시키는가?

  • 실제로 어떻게 프로세스를 생성하는가?

프로그램 실행을 위한 운영체제의 작업

  1. 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간에 탑재(load)

    1. 프로그램은 디스크 또는 SDD에 특정 실행 파일 형식으로 존재

    2. 초기 운영체제들은 프로그램 실행 전에 코드와 데이터를 모두 메모리에 탑재했었음

    3. 현대의 운영체제들은 프로그램 실행 중 코드나 데이터가 필요할 때 필요한 부분만 메모리에 탑재

      1. 페이징(paging)과 스와핑(swapping) 동작의 이해가 필요

  2. 일정량의 메모리가 프로그램의 실행시간 스택(run-time stack 또는 그냥 stack) 용도로 할당

    1. C 프로그램에서는 스택을 지역 변수, 함수 인자, 리턴 주소 등을 저장하기 위해 사용

  3. 프로그램의 힙(heap)을 위한 메모리 영역을 할당

    1. C 프로그램에서 힙을 동적으로 할당된 데이터를 저장하기 위해 사용

    2. 연결 리스트, 해시 테이블, 트리 등 크기가 가변적인 자료 구조를 위해 사용

  4. 입출력과 관계된 초기화 작업을 수행

    1. Unix 시스템에서 각 프로세스는 표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러(STDERR) 장치에 해당하는 세 개의 파일 디스크립터(file descriptor)를 가짐

  5. 프로그램의 시작 지점(entry point)(main()) 루틴으로 분기함으로써 CPU를 새로 생성된 프로세스에게 넘기게 되고 프로그램 실행이 시작


4️⃣ 프로세스 상태

프로세스의 상태를 단순화하면 다음 세 상태 중 하나에 존재

  • 실행(Running): 프로세스는 명령어를 실행하고 있음

  • 준비(Ready): 운영체제의 다른 프로세스 실행 등의 이유로 실행을 대기 중

  • 대기(Blocked): 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단

    • ex) 프로세스가 디스크에 대한 I/O 요청 후 완료될 때까지 대기

프로세스는 운영체제의 스케줄링 정책에 따라 스케줄이 되면 준비 상태에서 실행 상태로 전이

프로세스가 대기 상태가 되면 이벤트가 발생(대기 원인 해소)할 때까지 대기 상태 유지

이벤트가 발생하면 프로세스는 다시 준비 상태로 전이되고 운영체제의 결정에 따라 바로 다시 실행도 가능

다음과 같은 상태를 가지는 시스템도 존재

  • 초기(initial): 프로세스가 생성되는 동안 머무름

  • 최종(final): 프로세스는 종료되었지만 메모리에 남아있음(Unix-기반 시스템에서 좀비(zombie) 상태라고 불림)

    • 프로세스가 성공적으로 실행했는지를 다른 프로세스(보통은 부모(parent) 프로세스)가 검사하는 데 유용


5️⃣ 자료 구조

프로세스 리스트(process list): 준비 상태의 프로세스와 프로세스 실행 여부를 추적하기 위한 추가 정보를 담는 자료 구조

대기 상태인 프로세스도 파악해야 함

레지스터 문맥(register context): 프로세스가 중단되었을 때 해당 프로세스의 레지스터값들을 저장하는 자료 구조
➡️ 이 레지스터값들을 실제 물리 레지스터에 다시 저장함으로써 운영체제는 프로세스 실행을 재개

프로세스 제어 블럭(Process Control Block, PCB): 프로세스의 관리를 위한 정보를 저장하는 자료 구조


📚 참고 문헌

Operating Systems: Three Easy Pieces ― 4: The Abstraction: The Process

운영체제 아주 쉬운 세 가지 이야기 ― 7: 프로세스의 개념

관련있는 게시물


Made with React, Gatsby and DatoCMS by @smastrom

Contribute or star on GitHub

© 2022-2023 손승열 for 🅒🅞🅝🅣🅔🅝🅣🅢

모두 좋은 하루 보내세요! 😊