Cute Running Puppy

cs/[OS] 혼자 공부하는 컴퓨터 구조 + 운영체제

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

R.silver 2024. 1. 30. 19:56
반응형

10-1. 프로세스 개요

  • 포그라운드 프로세스
    사용자가 볼 수 있는 공간에서 실행되는 프로세스
  • 백그라운드 프로세스
    사용자가 볼 수 없는 공간에서 실행되는 프로세스
    • 데몬(유닉스), 서비스(윈도우)
      사용자와 상호작용하지 않고 정해진 일 만 수행하는 백그라운드 프로세스

      프로세스 제어 블록 (PCB)

      빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 cpu와 같은 지원을 배분할 때 사용
  • 프로세스와 관련된 정보를 저장하는 자료구조
  • 커널 영역에 생성
  • 특정 프로세스 식별, 처리 정보 저장
  • 프로세스 생성시 만들어지고, 실행이 끝나면 폐기
    새로운 프로세스 생성 == PCB 생성
    프로세스 종료 == PCB 제거

PCB에 저장되는 항목

1. 프로세스 ID (PID)

프로세스 식별 번호

2. 레지스터 값

해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값
프로세스 실행시 이전까지 사용했던 레지스터의 중간 값을 복원하기 위해

3. 프로세스 상태

입출력장치 사용 대기, CPU 사용 대기 등 파악

4. CPU 스케줄링 정보

언제 어떤 순서로 CPU 할당받을지

5. 메모리 관리 정보

프로세스가 저장된 메모리 주소
베이스 레지스터 , 한계 레지스터, 페이지 테이블 정보 등이 담김

6. 사용한 파일과 입출력장치 목록

어떤 입출력장치가 해당 프로세스에 할당 되었는지, 어떤 파일을 열었는지

문맥 교환

  • 문맥
    하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
    PCB에 저장되는 정보들 
    인터럽트 발생시 PCB에 문맥을 백업함 
  • 문맥 교환
    기존 프로세스의 문맥을 PCB에 백업하고, 새 프로세스의 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것 

    프로세스의 메모리 영역

  • 정적 할당 영역: 크기가 고정된 영역
  • 동적 할당 영역: 크기가 고정되지 않은 영역

    정적 할당 영역 - 1. 코드 영역

    == 텍스트 영역
    실행할 수 있는 코드 (기계어로 이루어진 명령어) 저장
    CPU가 실행할 명령어가 담겨있기에 쓰기 금기 (읽기 전용 공간)

    정적 할당 영역 - 2. 데이터 영역

    프로그램이 실행되는 동안 유지할 데이터 저장 (대표적으로 전역 변수)

    동적 할당 영역 - 1. 힙 영역

    프로그래머가 직접 할당할 수 있는 저장 공간 (할당 후 반환)
  • 메모리 누수: 반환하지 않아 메모리에 계속 남아 메모리가 낭비되는 것
    낮은 주소 -> 높은 주소

    동적 할당 영역 - 2. 스택 영역

    데이터를 일시적으로 저장하는 공간 (대표적으로 매개변수, 지역변수)
    높은 주소 -> 낮은 주소

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

    프로세스 상태

    1. 생성 상태 (new)

    프로세스를 생성중인 상태
    메모리에 적재되어 PCB를 할당 받은 상태
    실행할 준비가 되면 준비 상태로 이동

    2. 준비 상태 (ready)

    cpu 할당 차례를 기다리는 상태

    3. 실행 상태 (running)

    cpu를 할당 받아 실행중인 샅애
    할당된 시간 동안만 cpu 사용 가능
    할당된 시간을 모두 사용한다면 다시 준비 상태로 이동

    4. 대기 상태 (blocked)

    입출력장치의 작업을 기다리는 상태
    입출력 작업이 완료되면 준비 상태로 변경

    5. 종료 상태 (terminated)

    프로세스가 종료된 상태
    PCB, 프로세스가 사용한 메모리 정리
    ![[Pasted image 20240130141057.png]]

프로세스 계층 구조

  • 부모 프로세스: 새 프로세스를 생성한 프로세스
  • 자식 프로세스: 부모 프로세스에 의해 생성된 프로세스
  • PPID: 부모 프로세스의 PID

    프로세스 생성 기법

    fork, exec는 시스템 콜
  • fork
    복사본을 자식 프로세스로 생성
    생성된 프로세스는 부모 프로세스의 자원을 상속 받음 (PID와 저장된 메모리 위치는 다름)
  • exec
    메모리 공간을 다른 프로그램으로 교체
    fork로 복사본이 만들어진 이후 자식 프로세스는 exec 시스템 콜을 통해 새로운 프로그램을 전환
    코드 영역, 데이터 영역이 실행할 프로그램의 내용으로 바뀜, 나머지 영역은 초기화 됨

10-3. 스레드

프로세스를 구성하는 실행의 흐름 단위

프로세스와 스레드

  • 단일 스레드 프로세스
    하나의 실행 흐름을 가진 프로세스 
  • 스레드
    하나의 프로세스가 한 번에 여러 일을 동시에 처리 할 수 있게 함
    프로세스를 구성하는 실행 단위

프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행된다
=> 프로세스: 실행되는 프로그램
=> 스레드: 프로세스를 구성하는 실행의 흐름 단위

멀티프로세스와 멀티스레드

  • 멀티프로세스: 여러 프로세스를 동시에 실행하는 것
  • 멀티스레드: 여러 스레드로 프로세스를 동시에 실행하는 것
    프로세스끼리는 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유함 -> 협력과 통신에 유리
    그러나 멀티 스레드 환경에서 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다
  • IPC: 프로세스 간 통신 (자원을 공유하고 주고 받는 것)
    • 파일
반응형