컴퓨터 구조 + 운영체제 #09

박영무·2024년 12월 26일
post-thumbnail

참고 서적: 혼자 공부하는 컴퓨터 구조 + 운영체제 (강민철, 한빛미디어)


I. 프로세스

1. 프로세스 종류

1) Foreground Process

  • 사용자가 볼 수 있는 공간에서 실행되는 프로세스

2) Background Process

  • 사용자와 상호작용하며 사용자가 볼 수 없는 공간에서 실행되는 프로세스
  • Daemon (또는 Service): 사용자와 상호작용하지 않고 정해진 일만 수행하는 프로세스

2. PCB (Process Control Block)

1) CPU 스케줄링

  • 모든 프로세스는 실행을 위해 CPU가 필요하지만, CPU 자원은 한정되어 있다.
  • 프로세스들은 돌아가며 한정된 시간만큼만 CPU를 사용하며, 타이머 인터럽트가 발생하면 다른 프로세스에게 CPU를 양도한다.

2) PCB

  • 빠르게 번갈아 가며 실행되는 프로세스를 관리하기 위해 사용하는 자료구조이다.
  • 프로세스의 정보를 저장하는 자료구조이다.
  • 프로세스 생성 시 커널 영역에 생성되며, 프로세스 종료 시 폐기된다.

3) PCB에 담기는 정보

  • PCB에 담기는 대표적인 정보
    • PID Register 값 Process 상태 CPU 스케줄링 정보 Memory 정보 사용한 파일과 입출력 장치의 정보
  • PID: 특정 프로세스를 고유하게 식별하기 위한 번호
  • Register 값: 프로세스는 번갈아 가며 실행되는데 자신의 실행 차례가 되돌아올 때 이전까지 사용한 레지스터의 중간 값을 알고 있어야 이를 모두 복원하여 실행을 재개하기 때문에 PC, SP 값 등을 PCB에 저장한다.
  • Memory 정보: 프로세스가 어느 주소에 저장되어 있는지에 대한 정보와 페이지 테이블 정보가 저장된다.

II. Context Switching

1. 문맥 교환

1) 문맥 교환

  • 실행 중인 프로세스 A에서 다른 프로세스 B로 실행 순서가 넘어간다면,
    기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업한다.
  • 기존에 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정을 문맥 교환이라고 한다.

2) 문맥

  • 프로세스 A가 백업하는 중간 정보를 문맥 (Context)라고 한다.
  • 백업해 둔 문맥을 사용하여 문맥 교환 시 프로세스 실행을 재개할 수 있다.

3) Context에 저장되는 정보

  • PC, SP 등의 Register 값
  • Memory 정보
  • 열었던 파일, 사용한 입출력장치 등

III. Memory Area

  • Code 영역 (=Text 영역), Data 영역, Heap 영역, Stack 영역

1. Code 영역 (정적 할당 영역)

  • 실행 가능한 코드와 기계어로 이루어진 명령어가 저장되는 영역이다.
  • 데이터가 아닌 CPU가 실행할 명령어가 담기므로 쓰기가 금지된 영역이다. (Read-Only)

2. Data 영역 (정적 할당 영역)

  • 잠깐 사용하고 없앨 데이터가 아닌, 프로그램이 실행되는 동안 유지할 데이터가 저장되는 영역이다.
  • 예: 전역 변수

3. Heap 영역 (동적 할당 영역)

  • 프로그래머가 직접 할당할 수 있는 메모리 영역이다.
  • 일반적으로 낮은 주소에서 높은 주소 순으로 할당된다.

4. Stack 영역 (동적 할당 영역)

  • 일시적으로 사용할 데이터가 저장되는 영역이다.
  • 예: 매개 변수, 지역 변수
  • 일반적으로 높은 주소에서 낮은 주소로 할당된다.

IV. 프로세스 상태

  • 준비 상태, 실행 상태, 대기 상태, 종료 상태

1. 생성 상태 (New)

  • 이제 막 메모리에 적재되어 PCB를 할당 받은 상태이다.
  • 준비가 완료되었다면 준비 상태로 전환된다.

2. 준비 상태 (Ready State)

  • 자신이 실행될 순서가 될 때까지 대기하는 상태이다.

3. 실행 상태 (Running State)

  • CPU를 할당 받아 실행 중인 상태이다.
  • 타이머 인터럽트 (HW 인터럽트) 발생 시 준비 상태로 되돌아간다.
  • 프로세스 실행 도중 입출력장치 사용 시 입출력 작업이 완료될 때까지 대기 상태로 전환된다.

4. 대기 상태 (Waiting State)

  • 프로세스 실행 중 입출력장치를 사용하는 상태이다.
  • 입출력 작업은 CPU에 비해 느리기 때문에 대기 상태로 전환된다.
  • 입출력 작업이 완료되면 준비 상태로 전환된다.

5. 종료 상태 (Terminated State)

  • 프로세스가 종료된 상태이다.
  • PCB를 폐기하고 프로세스의 메모리 영역을 정리해야 한다.

V. 프로세스 계층 구조

1. 프로세스 계층 구조

  • 프로세스 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.
  • pstree 명령어를 통해 현재 실행 중인 프로세스의 계층 구조를 확인할 수 있다.

  • 부모 프로세스
    • 생성된 새 프로세스

  • 자식 프로세스
    • 부모 프로세스에 의해 생성된 프로세스
    • 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가진다.
    • 일부 OS에서는 자식 프로세스 PCB에 PPID를 명시하기도 한다.

2. 프로세스 생성 기법

  • fork 시스템 호출
    • 원본 (=부모) 프로세스가 자신의 자식 프로세스가 될 복사본을 생성한다.
    • 복사본은 원본 프로세스의 자원을 상속 받는다.

  • exec 시스템 호출
    • 복사본 (=자식) 프로세스가 자신의 메모리 공간을 새로운 프로그램으로 덮어씌운다.
    • 코드/데이터 영역은 실행할 프로그램 내용으로 바뀌고 나머지 영역은 초기화된다.

VI. 스레드

1. 스레드

  • 스레드는 프로세스를 구성하는 실행 흐름의 단위이다.
  • 모든 프로세스는 하나 이상의 스레드를 가진다.

2. 스레드 구성 요소

  • 스레드는 스레드 ID (TID), PC 등의 레지스터 값, 스택 영역 등 실행에 필요한 최소한의 정보를 가지고 있다.
  • 각각의 스레드들은 코드/데이터/힙 영역, 파일 등의 프로세스의 자원을 공유한다.

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

  • 멀티 프로세스
    • 동일한 작업을 수행하는 단일 스레드 프로세스 여러 개를 실행하는 것

  • 멀티 스레드
    • 하나의 프로세스를 여러 스레드로 실행하는 것
profile
시행착오는 성장의 밑거름입니다.

0개의 댓글