본문 바로가기

전공/운영체제

[운영체제]3장 프로세스와 스레드

728x90
책 "쉽게 배우는 운영체제"를 참고하여 쓴 글입니다

프로세스의 개요

프로세스의 개념

프로세스: 하나의 작업 단위, 실행을 위해 메모리에 올라온 동적인 상태이다.

 

프로세스 운용 기법

일괄 작업 방식

시분할 방식

 

프로그램에서 프로세스로의 전환

시분할 방식 시스템에서 프로그램이 프로세스로 전환될 때

운영체제가 프로그램을 메모리의 적당한 위치로 가져옴 -> 작업 지시서 만듬 == 프로세스 제어 블록 (PCB)

 

프로세스 제어 블록(PCB): 아래 정보를 보관하는 데이터 구조

  1. 프로세스 구분자(PID): 각 프로세스를 구분하는 구분자
  2. 메모리 관련 정보: 프로세스의 메모리 위치 정보
  3. 각종 중간값: 프로세스가 사용했던 중간값

프로세스의 상태

  • 프로세스의 네 가지 상태(간단한 상태) 
    • 생성 상태: 프로세스가 메모리에 올라와 실행 준비 완료, PCB생성
    • 준비 상태: 생성된 프로세스가 CPU를 얻을 때 까지 기다리는 상태 -> 이때 다음 실행할 프로세스 선정하는 일은 CPU 스케줄러가 담당
      • CPU 스케줄러: 준비상태의 맨 앞에서 기다리고 있는 PCB를 CPU에 전달 하여 작업이 이루어지게 하는 것. 이 작업을 디스패치라고 함. 
    • 실행 상태: 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행 하는 상태
    • 완료 상태: 작업을 마치고 PCB를 반환한 상태

  • 프로세스의 다섯 가지 상태
    • 생성 상태: 프로그램이 메모리에 올라오고 운영체제로부터 PCB를 할당받은 상태
    • 준비 상태: 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태. ready queue에서 기다리며 CPU 스케줄러가 관리
    • 실행 상태: 프로세스가 CPU를 할당받아 실행되는 상태. 이때 싱행 상태에 있는 프로세스는 타임 슬라이스(자신에게 주어진 시간)동안만 작업 가능
    • 대기 상태: 프로세스가 입출력을 요구했을때 입출력이 될 때 까지 기다리는 상태. 이 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다린다.
    • 완료 상태: 프로세스가 종료되는 상태. 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB 폐기
  • 휴식 상태와 보류 상태(다섯 가지 상태를 제외한 특별한 경우)
    • 휴식 상태: 프로세스가 작업을 일시적으로 쉬고 있는 상태
    • 보류 상태: 프로세스가 메모리에서 잠시 쫓겨난 상태

 

프로세스 제어 블록과 문맥 교환

프로세스 제어 블록(PCB)

프로세스 제어 블록(PCB): 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조로 TCB(Task Control Block)이라고도 한다.

PCB의 구성

  • 포인터: 준비 상태나 대기 상태를 큐로 운영되는데 PCB를 연결하여 큐를 구현할 때 포인터를 사용한다
  • 프로세스 상태: 상태에는 생성, 주닙, 실행, 대기, 보류 준비, 보류 대기 등이 있으며 이중 프로세스가 어떤 상태에 있는지를 나타낸다.
  • 프로세스 구분자(PID): 여러 프로세스를 구별하기 위한 구분자를 저장한다.
  • 프로그램 카운터(PC): 다음 실행될 명령어이 위치를 가리키는 PC값을 저장한다.
  • 프로세스 우선순위
  • 각종 레지스터 정보: 누산기, 색인 레지스터 등
  • 메모리 관리 정보: 프로세스가 메모리의 어디에 있는지 나타내는 메모리 위치 정보, 경계 레지스터 값, 한계 레지스터 값 등
  • 할당된 자원 정보: 프로세스를 실행하기 위해 사용하는 입출력 자원이나 오픈 파일 등에 대한 정보
  • 계정 정보: 계정 번호, CPU 할당 시간, CPU 사용 시간 등
  • 부모 프로세스 구분자(PPID)와 자식 프로세스 구분자(CPID) 정보

문맥 교환

문맥 교환: CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업. 이때 두 PCB 내용이 변경됨. 두 프로세스의 PCB를 교환 하는 작업을 말한다.

 

문맥 교환의 절차

문맥 교환이 일어나는 경우: 한 프로세스가 자신에게 주어진 시간을 다 사용했을 때, 인터럽트가 걸렸을 때

 

프로세스의 연산

프로세스의 구조

  • 코드 영역: 프로그램 본문이 기술된 곳
  • 데이터 영역: 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳
  • 스택 영역: 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳

프로세스의 생성과 복사

프로세스는 프로그램을 실행할 때 새로 생성된다. 이렇게 새로 생성하는 방법도 있지만 실행 중인 프로세스에서 새로운 프로세스를 복사하는 방법도 있다. -> fork()

 

fork()시스템 호출의 개념

fork() 시스템 호출: 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수. 이를 사용하면 실행중인 프로세스와 똑같은 프로세스가 하나 더 만들어 진다.

 

fork() 시스템 호출의 동작 과정: 복사되는 프로세스는 부모 프로세스, 복사된 프로세스는 자식 프로세스라고 함

  • PID가 바뀐다.
  • 서로 차지하는 메모리 위치가 다르므로 메모리 관련 정보가 바뀐다.
  • PPID(부모 프로세스 구분자)와 CPID(자식 프로세스 구분자)가 바뀐다. 자식 프로세스가 없을때의 CPID는 -1이다.

fork() 시스템 호출의 장점

  • 프로세스 생성 속도가 빠르다
  • 추가 작업 없이 자원을 상속할 수 있다
  • 시스템 관리를 효율적으로 할 수 있다

exec() 시스템 호출

exec() 시스템 호출:  기존 프로세스를 새로운 프로세스로 전환하는 함수. 이미 만들어진 프로세스의 구조를 재활용 하는 것이다.

fork(): 새로운 프로세스를 복사하는 시스템 호출이다
exec(): 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출이다. 현재의 프로세스가 완전히 다른 프로세스로 전환된다.

 

exec() 시스템 호출의 동작 과정

  • 코드 영역에 있는 기존 내용이 지워지고 새로운 코드로 바뀐다.
  • 데이터 영역이 새로운 변수로 채워지고 스택 영역이 리셋된다
  • PID,PPID,CPID, 메모리 관련 사항등은 변하지 않지만 PC 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋된다.

exec() 실행결과

 

프로세스 계층 구조

프로세스 계층 구조의 장점

  • 여러 작업의 동시 처리
  • 프로세스 재사용 용이
  • 용이한 자원 회수

고아 프로세스와 좀비 프로세스

고아 프로세스: 자식 프로세스가 종료되기 전에 부모 프로세스가 먼저 종료되었을때의 자식 프로세스

좀비 프로세스: 자식 프로세스가 종료되었는데도 부모 프로세스가 뒤처리를 하지 않을 때 발생

->이 둘이 많아지면 자원 낭비, 효율적인 운영에 방해

-> exit(), return()문은 자식 프로세스가 작업이 끝났음을 부모 프로세스에 알려줌으로써 해당 일들이 일어나는 것을 방지한다.

 

스레드

스레드의 개념

스레드: 프로세스 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위

 

프로세스와 스레드의 차이

  • 프로세스는 여러 개의 스레드로 구성되고 스레드끼리는 강하게 연결되어 있다.
  • 프로세스는 서로 독립적이다

멀티태스크와 멀티스레드

멀티태스크: 여러 개의 프로세스로 구성, 프로세스 간 통신을 이용

멀티스레드: 하나의 프로세스에 여러 개의 스레드로 구성, 변수나 파일 등을 공유하고 전역 변수나 함수 호출 등의 방법으로 스레드 간 통신

 

스레드 관련 용어

멀티스레드: 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법

멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법, 시분할 시스템에서 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 스레드이다.

멀티 프로세싱: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경

CPU 멀티스레드: 한번에 하나씩 처리해야 하는 스레드를 잘게 쪼개어 동시에 처리하는 명령어 병렬처리 기법

멀티스레드의 장단점

  • 장점
    • 응답성 향상
    • 자원공유
    • 효율성 향상
    • 다중 CPU 지원
  • 단점
    • 한 스레드에 문제 생기면 전체 프로세스에 영향을 미침

 

멀티스레드 모델

사용자 스레드(1 to N 모델): 문맥 교환이 필요 없다

커널 스레드(1 to 1 모델): 멀티 CPU 사용 가능, 문맥 교환을 할때 오버헤드 때문에 느리게 작동

멀티레벨 스레드(M to N 모델): 사용자 스레드와 커널 스레드를 혼합, 커널 스레드 개수 <= 사용자 스레드

 

728x90