혼공컴운 챕터 10. 프로세스와 스레드

김민영·2023년 2월 4일
0

혼공학습단

목록 보기
8/22
post-thumbnail

10-1 프로세스 개요

프로세스 확인하기

  • 윈도우 작업 관리자에서 확인 가능
  • 유닉스는 ps 명령어로 확인 가능

포그라운드 프로세스 foreground process

  • 눈에 보이는 프로세스

백그라운드 프로세스 background process

  • 눈에 안보이는 프로세스

데몬(유닉스), 서비스(윈도우)

  • 사용자와 상호작용하지 않는 백그라운드 프로세스

프로세스 제어 블록

프로세스 제어 블록 PCB : Process Control Block

  • 프로세스 실행 순서 관리, 프로세스에 CPU와 같은 자원 배분
  • 프로세스에 관한 정보 저장하는 자료 구조
  • 커널 영역에 위치
  • 운영체제는 PCB를 통해 특정 프로세스를 식별, 프로세스 처리에 필요한 정보 판단

PCB에 담기는 정보

프로세스 ID : PID

  • 프로세스를 식별하는 고유한 번호
  • 같은 프로그램을 두 개 실행해도 다른 PID의 프로세스로 생성됨

레지스터 값

  • 프로세스가 실행되면 이전까지 사용했던 레지스터의 중간값 복원 : 이전까지 진행했던 작업을 이어서 실행하기 위함
  • 프로그램 카운터와 같은 레지스터 값

프로세스 상태

  • 현재 프로세스의 상태
  • ex. 입출력장치를 기다리는 상태, CPU 기다리는 상태, CPU 이용하는 상태 ...

CPU 스케줄링 정보

  • 프로세스가 언제 어떤 순서로 CPU를 할당받을지

메모리 관리 정보

  • 프로세스가 메모리에 저장된 위치
  • 베이스 레지스터, 한계 레지스터
  • 페이지 테이블 정보

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

  • 어떤 입출력장치가 할당되었는지, 어떤 파일을 열었는지

문맥 교환

  • 프로세스 실행 순서가 넘어갈 때 발생

문맥 context

  • 프로세스 수행을 재개하기 위해 기억해야하는 정보
  • 하나의 프로세스 문맥은 해당 프로세스의 PCB에 표현되어 있음

문맥 교환 context switching

  • 인터럽트 발생 시 PCB에 문맥 백업, 다음 프로세스의 문맥 복구
  • 너무 자주 발생 시 오버헤드 발생

프로세스 메모리 영역

  • 정적 할당 영역 : 코드 영역, 데이터 영역
  • 동적 할당 영역 : 힙 영역, 스택 영역

코드 영역 == 텍스트 영역

  • 기계어 명령어가 저장.
  • CPU가 실행할 명령어 담김.
  • 읽기 전용

데이터 영역

  • 프로그램 실행 중에 유지할 데이터
  • 전역 변수

힙 영역

  • 사용자(프로그래머)가 직접 할당할 수 있는 저장 공간
  • 사용이 끝나면 반환 필요
  • 반환하지 않으면 메모리 누수 memory leak 발생
    • 힙 영역으로 할당된 공간이 메모리에 남아서 메모리 낭비 초래

스택 영역

  • 데이터를 일시적으로 저장하는 공간
  • 매개 변수, 지역 변수
  • 메모리 할당
    • 스택 영역은 높은 주소에서 낮은 주소로 메모리 할당
    • 힙 영역은 낮은 주소에서 높은 주소로 메모리 할당

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

프로세스 상태

생성 상태 new

  • 메모리에 적재되어 PCB를 할당받은 상태

준비 상태 ready

  • CPU 할당받아 바로 실행할 수 있는 상태
  • 실행 차례를 기다리는 상태
  • dispatch : 준비 상태 -> 실행 상태

실행 상태 running

  • CPU 할당, 실행 중
  • 할당 시간 동안만 CPU 사용 가능
  • 할당 시간 끝나면 타이머 인터럽트 발동, 준비 상태가 됨
  • 입출력장치를 사용하여 입출력장치 작업 끝날때까지 기다려야하면 대기 상태

대기 상태 blocked

  • 프로세스가 입출력장치 사용하는 경우, 입출력장치 사용 끝날때까지(입출력완료 인터럽트 받을 때까지) 기다림
  • 입출력장치 사용 끝나면 준비 상태가 됨

종료 상태 terminated

  • 프로세스 종료.
  • 운영체제는 PCB와 프로세스가 사용한 메모리 정리

프로세스 상태 다이어그램

프로세스 계층 구조

  • 프로세스는 실행 도중 다른 프로세스 생성할 수 있음 - 그래프로 나타낸 것이 프로세스 계층 구조
  • 부모 프로세스가 자식 프로세스를 생성
  • 각 다른 PID 가짐.
  • 자식 프로세스 PCB에 부모 프로세스의 PID인 PPID 기록되기도 함
  • 최상위 층에는 최초의 프로세스가 있음 : 항상 PID가 1
    • 유닉스 : init
    • 리눅스 : systemd
    • macOS : launchd

프로세스 생성 기법

fork

  • 부모 프로세스가 자신의 복사본을 자식 프로세스로 생성

exec

  • 부모의 복사본인 자식 프로세스가 자신의 메모리 공간을 다른 프로그램으로 교체

과정

  1. 부모 프로세스는 fork로 복사본을 만들어서 자식 프로세스로 생성
  2. 자식 프로세스는 부모 프로세스의 자원 ( 메모리 내 내용, 열린 파일 목록 ) 상속받음. PID, 저장된 메모리 위치는 다름
  3. exec을 통해 새로운 프로그램으로 전환. 자신의 메모리 공간을 새로운 프로그램으로 덮어쓰는 시스템 호출

스레드

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

프로세스와 스레드

  • 단일 스레드 프로세스 : 한 번에 하나의 작업을 처리하는 프로세스
  • 멀티스레드 프로세스 : 여러 작업을 처리하는 프로세스
    • 프로세스의 자원 공유 (힙, 데이터, 코드 영역)

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

  • 프로세스끼리 자원 공유 X
    • 프로세스를 fork하면, PID, 저장된 메모리 주소를 제외한 모든 자원이 복제되어 메모리 적재
    • 같은 데이터가 중복되므로 메모리 낭비
  • 스레드끼리 같은 프로세스 내의 자원 공유
    • 각기 다른 스레드 ID, 레지스터 값(프로그램 카운터), 스택을 가짐
    • 동일 주소 공간의 코드, 데이터, 힙 영역 공유
    • 메모리 효율적으로 사용
    • 협력, 통신 유리
    • 하나의 스레드에 문제 발생 시, 다른 스레드에 영향 받음

프로세스 간 통신

  • IPC : Inter-Process Communication
  • ex. 파일을 통해 통신, 공유 메모리로 통신

미션

p.304 1번

profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글