[혼공컴운] 혼공단 11기 - 4주차 (10장)

shyn26·2024년 2월 11일
0

혼공학습단

목록 보기
12/20

10. 프로세스와 스레드

10-1. 프로세스 개요

프로세스 : 실행중인 프로그램

  • 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐, 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 됨
    ‘프로세스를 생성한다’ 라고 표현

프로세스 직접 확인하기

  • 컴퓨터 부팅 순간, 수많은 프로세스들이 실행됨
    • 윈도우 : 작업관리자 > 프로세스 탭 에서 확인
    • 유닉스 : ps 명령어로 확인
      [root@localhost ~]# ps -ef
      UID PID PPID C STIME TTY TIME CMD
      root 1 0 0 May17 ? 00:00:53 /lib/systemd/systemd -- system --deserialize 40
      root 2 0 0 May17 ? 00:00:00 [kthreadd]
      root 3 2 0 May17 ? 00:00:00 [rcu_gp]
      root 4 2 0 May17 ? 00:00:00 [rcu_par_gp]
      root 6 2 0 May17 ? 00:00:00 [kworker/0:0H-kb]
      root 8 2 0 May17 ? 00:00:00 [mm_percpu_wq]
      root 9 2 0 May17 ? 00:00:06 [ksoftirqd/0]
      root 10 2 0 May17 ? 00:00:42 [rcu_sched]
  • 포그라운드 프로세스(foreground process) : 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스(background process) : 사용자가 보지 못하는 뒤 편에서 실행되는
    • 사용자와 상호작용하지 않고 그저 묵묵히 정해진 일만 수행하는 백그라운드 프로세스
      • 윈도우 : 서비스(service) 라고 함
      • 유닉스 : 데몬(daemon) 이라고 함

프로세스 제어 블록

운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리, 프로세스에 CPU를 비롯한 자원을 배분하기 위해 프로세스 제어 블록(PCB; Process Control Block (이하 PCB)) 을 이용

  • PCB는 커널 영역에 생성
  • 운영체제도 수많은 프로세스들 사이에서 PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는 데 필요한 정보를 판단
  • PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기

  • ‘새로운 프로세스가 생성되었다’ = ‘운영체제가 PCB를 생성했다’
  • ‘프로세스가 종료되었다’ = ‘운영체제가 해당 PCB를 폐기했다’

[PCB에 담긴 대표적인 정보들]

  • 프로세스 ID
  • 레지스터 값
  • 프로세스 상태
  • CPU 스케줄링 정보
  • 메모리 관리 정보
  • 사용한 파일과 입출력장치 목록

문맥 교환

  • 문맥(context) : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
  • 문맥 교환(context switching) : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
이미지1
이미지2

프로세스의 메모리 영역

하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역,
스택 영역
으로 나뉘어 저장

[코드 영역(code segment)]

  • 텍스트 영역(text segment) 이라고도 함
  • 기계어로 이루어진 명령어가 저장
  • 코드 영역은 읽기 전용(read-only) 공간
  • 정적 할당 영역

[데이터 영역(data segment)]

  • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
  • 전역 변수(global variable)가 대표적인 데이터
    • ‘프로그램이 실행되는 동안 유지되며, 프로그램 전체에서 접근할 수 있는 변수’
      → 12장에서 설명
  • 정적 할당 영역

[힙 영역(heap segment)]

  • 프로그래머가 직접 할당할 수 있는 저장 공간
  • 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 함
    • ‘더 이상 해당 메모리 공간을 사용하지 않겠다’라고 운영체제에 말해주는 것
  • 메모리 누수(memory leak) : 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비
  • 동적 할당 영역

[스택 영역(stack segment)]

  • 데이터를 일시적으로 저장하는 공간
  • 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 말 값들이 저장되는 공간
  • 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수가 대표적인 데이터
  • 동적 할당 영역

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

프로세스 상태

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

프로세스 계층 구조


1. 사용자가 컴퓨터를 켠 순간에 생성된 최초 프로세스는 로그인을 담당하는 프로세스를 자식 프로세스로 생성
2. 로그인 프로세스는 사용자 인터페이스(bash 셸) 프로세스를 자식 프로세스로 생성
3. 사용자 인터페이스 프로세스는 Vim 프로세스를 생성

프로세스 생성 기법

  • 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성
  • 만들어진 복사본(자식 프로세스)은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체

[⭐혼공단 미션 인증!⭐]

[CH10]미션1. 304쪽 1번 풀기

Process states and transitions
프로세스는 요청에 따라 상태가 계속 전환된다.
new : 새롭게 생성된 process
ready : CPU에서의 실행을 기다리는 상태
running : 실행중인 process
waiting : I/O(사용자의 입출력)이나 scheduling에 의한 대기 상태
terminated : 실행을 마친 상태
(ready ≠ waiting), FCFS로 스케줄링 해줌


10-3. 스레드

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

프로세스와 스레드

  • CPU scheduling의 기본 단위 → Process 내부의 sub-task 단위로 일을 처리
    → (실제로 스레드 단위로 일을 처리, 훨씬 더 빠르고 효율적으로 일할 수 있다.)
  • flow of control within a process(process와 subprocess로 이해할 수 있음)
  • 각각의 thread는 각자의 register state와 stack을 가지고 있다.
  • 하나의 process는 하나 이상의 thread를 가지고 있음
  • process는 프로세스 간의 전환에 대하여 PCB에 접근해서 Process address space를 복사해오는 등의 과정 때문에 overhead가 클 수 밖에 없는데, thread는 Process에 비해 creation과 switching에 드는 시간이 적다는 장점이 있다.(Memory와 CPU 효율성 면에서 모두 장점을 가짐)
  • multi-threading in single core (≠ multi-processing in multi-core)
    • 하나의 process에 대해서 여러 thread가 만들어질 수 있고, 이 때 code와 address space, operating resources를 공유한다.
    • multi-threading을 통해서 동시성을 추구한다.
      • 병렬성(parallelism) : 여러 코어에서 동시에 process가 처리될 때 → multi-processing
        • parallelism = num of CPUs(cores)
      • 동시성(concurrency) : illusion of parallelism → (마치, CPU가 동시에 여러 일을 처리하는 것처럼 보임)
        Hyper-threading (intel CPU, logical core) : 마치 OS가 느끼기에는 physical core의 개수가 2배가 있는 것처럼 느끼게 하는 기술 (두 팔을 열심히 흔들면 4개인 것처럼 보이는 것)
      • (비유) 코어 = 노예, 스레드 = 노예의 팔
profile
Without haste, but without rest - J.W. von Goethe

0개의 댓글