컴퓨터 구조

[04] 운영체제 - 프로세스와 스레드

BGK97 2024. 3. 27. 16:51

프로세스

  • 실행중인 프로그램
  • 프로그램이 메모리에 적재되고 실행되는 순간 프로세스라고 부름

포그라운드 프로세스와 백그라운드 프로세스

  • 포그라운드 프로세스
    • 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스
    • 사용자가 보지 못하는 뒤에서 실행되는 프로세스
    • 사용자와 직접 상호작용하지 않는 백그라운드 프로세스를 '데몬', 윈도우에서는 '서비스'라고 함프로세스 제어 블록 (P C B)
  • 운영체제가 빠르게 번갈아 수행되는 프로세스의 순서를 관리하고
  • CPU를 비롯한 자원 배분을 위해 사용하는 블록
  • 프로세스와 관련된 정보를 저장하는 자료 구조
  • 프로세스 식별을 위한 꼭 필요한 정보가 저장됨
  • 프로세스 생성 시 만들어지고, 실행이 끝나면 폐기
  • PCB에 담기는 정보는 다음과 같다.
  1. 프로세스 ID (PID)
  • 특정 프로세스를 식벼랗기 위해 부여하는 고유 번호
  1. 레지스터 값
  • 자신의 실행 차례가 돌아오면 프로세스는 이전 까지 사용한 레지스터의 중간 값 복구
  • 이를 위해, PC값 등 레지스터 값이 담김
  1. CPU 스케줄링 정보
  • 프로세스가 언제 어떤 순서로 CPU를 할당 받을지에 대한 정보
  1. 메모리 관리 정보
  • 메모리에 저장된 위치가 다르기 때문에, 어느 주소에 저장되어있는지 확인
  • 베이스 레지스터나, 한계 레지스터 값 같은 정보가 들어감
  • 페이지 테이블 정보
  1. 사용한 파일과 입출력 장치 목록
  • 실행과정에서 특정 입출력 장치나 파일을 사용하면 PCB에 해당 내용 명시
  • 어떤 입출력장치가 할당 됐는지, 어떤 파일을 열었는지 저장

문맥 교환

  • 문맥
    • 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
  • PCB에 표현되어 있음
  • 실행 문맥을 잘 기억해두면 언제든 해당 프로세스의 실행을 재개할 수 있음
  • 문맥 교환은 기존 프로세스의 문맥을 PCB에 저장하고, 새 프로세스 실행을 위해 PCB로부터 문맥을 복구하여 새로운 프로세스를 실행하는 것

  • 프로세스가 끊임없이 빠르게 번갈아가며 실행되는 원리

프로세스의 메모리 영역

  • 사용자 영역에 저장됨
  • 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나누어 저장코드 영역
  • 텍스트 영역이라고 함
  • 실행할 수있는 코드(기계어로 이루어진)가 저장
  • CPU가 실행할 명령어 이기 때문에, 수정 불가데이터 영역
  • 프로그램이 실행되는 동안 유지될 데이터가 저장
  • 전역 변수 등...
  • 크기가 고정되어 있기 때문에 정적 할당 영역이라고 함힙 영역
  • 프로그램을 만드는 사용자, 프로그래머가 직접 할당할 수 있는 공간
  • 메모리 공간할당 후 사용 종료시, 해당 공간 반환 필요
  • 메모리 공간을 반납하지 않는다면, 메모리 누수 발생
  • 동적 할당 영역스택 영역
  • 데이터를 일시적으로 저장
  • 매개 변수나, 지역 변수가 대표적
  • 동적 할당 영역

일반적으로 힙 영역은 메모리의 낮은 주소에서 높은주소로, 스택은 반대로 할당

프로세스 상태와 계층 구조

프로세스 상태

  • 프로세스의 상태는 PCB를 통해 인식하고 관리
  • 프로세스가 가질 수 있는 상태는 다음과 같음
  1. 생성 상태
  • 프로세스를 생성중인 과정
  • 이제 막 메모리에 저장되어 PCB에 할당 받은 상태
  1. 준비 상태
  • 당장이라도 CPU를 할당 받아 실행할 수 있으나 아직 차례가 아닌 상태
  • 실행 상태로 전환되는 것을 디스패치라고 함
  1. 실행 상태
  • CPU를 할당 받아 실행중인 상태
  • 일정 시간만 이용할 수 있음
  • 타이머 인터럽트 발생시 다시 준비상태로 전환
  • 실행 도중 입출력장치를 사용해 입출력 장치의 작업이 끝날 때 까지 기다려야 한다면 대기 상태
  1. 대기 상태
  • 프로세스 사용 도중 입출력장치를 사용한 상태
  • 입출력장치가 입출력을 끝낼 때 까지 기다려야하는데, 이러한 상태를 대기 상태라 함
  1. 종료 상태
  • 프로세스가 종료된 상태
  • 운영체제는 CB와 프로세스가 사용한 메모리를 정리

  • 이 도표를 프로세스 상태 다이어그램이라고 함

프로세스 계층 구조

  • 프로세스 진행 중 시스템 호출을 통해 다른 프로세스를 생성 가능
  • 이 때 생성한 프로세스를 부모 프로세스, 생성된 프로세스가 자식 프로세스
  • 자식 프로세스의 PID는 부모프로세스의 PID인 PPID가 기록
  • 자식은 또 자식을 생성가능하여, 운영체제는 계층적인 구조로 프로세스를 관리

예시

  1. 사용자가 컴퓨터를 켠 순간 최초 프로세스는 로그인을 담당하는 프로세스를 자식으로 생성
  2. 로그인 프로세스는 사용자 인터페이스(bash 셀)을 자식으로 생성
  3. 사용자 인터페이스 프로세스는 Vim프로세스를 생성
  • 이 때 최초의 프로세스는 유닉스(init), 리눅스(systemd), macOS(launchd)
  • PID는 1번

프로세스 생성 기법

  • 부모 프로세스릉 통해 생성된 자식 프로세스는 복제 및 옷 갈아입기를 통해 실행
  • 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성
  • 이후 자식 프로세스는 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체
  • fork와 exec는 시스템 호출임

  • fork 한 후에 exec를 하지 않는다면, 같은 코드를 병행하여 실행하는 프로세스가 됨

스레드

  • 실행의 단위
  • 프로세스를 구성하는 실행의 흐름 단위
  • 하나의 프로세스는 여러개의 스레드를 가질 수 있음
  • 스레드를 이용해 하나의 프로세스에서 여러 부분을 동시에 실행 가능

단일 스레드 프로세스

  • 하나의 프로세스는 한 번의 하나의 일만 처리
  • 이 때 모든 프로세스는 하나의 실행흐름을 가지고 한번의 하나의 부분만 실행

멀티 스레드 프로세스

  • 스레드의 개념이 도입되며 하나의 프로세스가 한 번의 여러개를 처리할 수 있게 됨
  • 프로세스를 구성하는 여러 명령어를 동시에 실행할 수 있게 됨

스레드의 구성요소

  • 프로세스 내에서 각기 다른 스레드ID
  • PC값을 비롯한 레지스터 값
  • 스택
  • 이에 따라 각기 다른 코드를 실행 가능