컴퓨터 공학/운영체제

[혼공컴운] chapter.10 프로세스와 스레드

hhzn 2023. 7. 29. 21:26

2023.07.29 - [컴퓨터 공학/운영체제] - [혼공컴운] chapter.09 운영체제 시작하기

 

[혼공컴운] chapter.09 운영체제 시작하기

2023.07.23 - [컴퓨터 공학/컴퓨터 구조] - [혼공컴운] chapter.08 입출력장치 [혼공컴운] chapter.08 입출력장치 2023.07.23 - [컴퓨터 공학/컴퓨터 구조] - [혼공컴운] chapter.07 보조기억장치 [혼공컴운] chapter.07

zinistic.tistory.com

 

10-1 프로세스 개요

  • 프로세스 종류
    • 포그라운드 프로세스(forground process): 사용자가 볼 수 있는 공간에서 실행되는 프로세스
    • 백그라운드 프로세스(background process): 사용자가 볼 수 없는 공간에서 실행되는 프로세스
      - 데몬(demon): 유닉스 체계의 운영체제에서 백그라운드 프로세스를 부르는 명칭.
      - 서비스(service): 윈도우 운영체제에서 백그라운드 프로세스를 부르는 명칭.

  • 프로세스 제어 블럭(PCB. process control block)
    : 프로세스와 관련된 정보를 저장하는 자료 구조. 프로세스를 식별하기 위한 정보들이 포함된다.
    • 프로세스 ID(PID. process ID)
      : 프로세스를 식별하기 위해 부여하는 고유한 번호.
    • 레지스터 값
      : 자신의 실행상태가 돌아왔을 때 이전에 사용했던 레지스터 값을 복원하는데 필요한 값.
      ex) 프로그램 카운터
    • 프로세스 상태
      : 현재 프로세스의 상태를 기록.
    • CPU 스케줄링 정보
      : 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보.
    • 메모리 관리 정보
      : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보.
      ex) 페이지 테이블
    • 사용한 파일과 입출력장치 목록
      : 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용할시 명시됨.


  • 문맥 교환
    : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것.
    - 문맥: 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보.
    문맥 교환이 매우 빠르게 이루어져 사람의 눈에는 여러 프로세스들이 동시에 실행되는 것 처럼 보임.

    문맥 교환이 너무 자주 일어나면 오버헤드 시간이 길어지는(혹은 메모리) 문제 발생.
    *오버헤드(overhead): 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 혹은 메모리.


  • 프로세스의 메모리 영역
    • 코드 영역(code segment)
      : 실행할 수 있는 코드(기계어로 이루어진 명령어)가 저장됨. 쓰기 금지공간. Read-only 공간.
      텍스트 영역(text segment)라고도 함. 정적 할당 영역.
    • 데이터 영역(data segment)
      : 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간. 
      전역변수 등이 저장됨. 정적 할당 영역.
    • 힙 영역(heap segment)
      : 프로그래머가 직접 할당할 수 있는 저장 공간. 동적 할당 영역.
      * 직접 할당할 시에 메모리 누수 주의!
    • 스택 영역(stack segment)
      : 데이터를 일시적으로 저장하는 공간. 지역 변수 등이 저장됨. 동적 할당 영역.
      * 일시적으로 저장될 데이터는 스택 영역에 PUSH로 저장. 필요하지 않은 데이터는 POP으로 삭제.

사용자 영역의 프로세스 구조

 

 

 


 

 

10-2 프로세스 상태와 계층 구조

  • 프로세스 상태
    • 생성 상태(new)
      : 프로세스를 생성 중인 상태
      생성 상태를 거친 프로세스는 곧바로 실행 상태가 되지 않고 준비 상태가 되어 CPU 할당을 기다림.
    • 준비 상태(ready)
      : CPU를 할당받아 실행할 수 있지만, 자신의 차례를 기다리고 있는 상태
      * 디스패치(dispatch): 준비 상태인 프로세스가 실행 상태로 전환되는 것
    • 실행 상태(running)
      :  CPU를 할당받아 실행 중인 상태. 할당된 일정 시간 동안만 CPU 사용 가능.
    • 대기 상태(blocked)
      : 프로세스가 실행 도중 입출력장치를 사용하는 경우에 입출력장치의 작업을 기다리는 상태.
      입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다림.
    • 종료 상태(terminated)
      : 프로세스가 종료된 상태. 운영체제는 프로세스의 PCB와 메모리를 정리함.

프로세스 상태 다이어그램(process state diagram)

 

 

 

 

  • 프로세스 계층 구조
    • 부모 프로세스(parent process): 새 프로세스를 생성한 프로세스
    • 자식 프로세스(child process): 부모 프로세스에 의해 생성된 프로세스
      * 자식 프로세스에는 부모 프로세스의 PID인 PPID(parent PID)가 기록되기도 함.

프로세스 계층 구조의 예

 

* 최초의 프로세스
- 유닉스 운영체제: init
- 리눅스 운영체제: systemed
- mac OS: launchd

 

 

  • 프로세스 생성 기법
    • fork()
      : 부모 프로세스가 자식 프로세스로 자신의 복사본을 생성하는 시스템 호출.
    • exec()
      : 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출.

 

 

 

 


 

 

10-3 스레드

  • 프로세스와 스레드
    • 스레드(thread): 프로세스를 구성하는 실행의 단위.
    • 단일 스레드 프로세스: 한 번에 하나의 스레드가 실행되는 프로세스.
    • 멀티 스레드 프로세스: 한 번에 여러 스레드가 동시에 실행되는 프로세스.
      * 스레드는 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다.


  • 멀티프로세스와 멀티스레드
    • 멀티프로세스(multiprocess): 여러 프로세스를 동시에 실행하는 것
    • 멀티스레드(multithread): 여러 스레드로 프로세스를 동시에 실행하는 것

  • 멀티프로세스와 멀티스레드의 차이점
    : 프로세스끼리는 자원을 공유하지 않지만 스레드끼리는 같은 프로세스 내 자원을 공유함.

    * 같은 작업을 하는 동일한 프로세스 두 개
    → 모든 자원이 복제되어 메모리에 저장. 즉 PID, 메모리 주소를 제외한 모든 것이 동일한 프로세스가 메모리에 저장되어있는 상태 => 메모리 낭비!

    * 같은 작업을 하는 동일한 스레드 두 개
    → 프로세스가 가지고 있는 자원 공유. 여러 프로세스를 병행하는 것 보다 메모리를 효율적으로 사용 가능.
    => BUT, 하나의 스레드에 문제가 생기면 프로세스 전체에 문제 발생!

 

* 프로세스 간 통신(IPC. inter-process communication)
: 프로세스는 기본적으로 자원을 공유하지 않지만 프로세스 간의 자원을 공유하고 데이터를 주고 받도록 하는 것.




* 오류 지적은 환영입니다.^^*