CS 정리본 - 운영체제/프로세스/스레드/Context Switch

기술면접 대비 요약본 - CS
오니's avatar
Jun 15, 2024
CS 정리본 - 운영체제/프로세스/스레드/Context Switch

운영체제

  • 사용자가 컴퓨터 자원을 사용할 수 있도록 환경을 제공해주는 체제

커널과 모드

커널

  • 컴퓨터 하드웨어과 자원 등 중요한 것들을 관리하는 역할

사용자 모드

  • 커널에 접근할 수 ❌ 모드

커널 모드

  • 커널에 접근할 수 🅾️ 모드

시스템 콜

  • 사용자 모드에서 컴퓨터 자원을 이용하기 위한 요청

프로세스

  • 운영체제로 자원을 할당 받은 작업 단위

프로세스 구조

notion image
  • 코드 : 사용자가 작성한 코드
  • 데이터
    • BSS (Block Stated Symbol): 초기화 되지 않은 전역 변수
    • Data: 초기화가 된 전역변수
  • 힙: 런타임시에 결정 / 사용자에 의해 동적할당이 이뤄짐
  • 스택: 컴파일 시간에 결정 / 지역변수, return 값 등이 저장 됨

PCB

  • Process Control Block
  • 프로세스를 제어하기 위해 프로세스 정보 저장
  • 아래와 같은 값들이 저장 됨
    • PC(Program Counter / 명령어 주소 값)
    • PID
    • Stack Pointer 등

IPC

Inter Process Communication
  • 프로세스 간의 데이터 전달 방식이다.
      1. 공유 메모리
      1. 소켓
      1. 파이프
      1. 메세지 큐

좀비 / 고아 프로세스

좀비 프로세스

  • 부모가 자식 종료 회수를 안한 경우

고아 프로세스

  • 부모가 먼저 종료된 경우 (root 프로세스가 자원을 나중에 회수 한다)

프로세스 상태도

notion image

CPU 스케쥴링

  • 어떤 프로세스를 다음 작업에 올릴 것인지 결정하는 알고리즘
  1. 장기 (생성 → 준비)
      • 준비 큐에 어떤 프로세스를 오릴 것인가?
  1. 중기 (중단 ↔ 준비/대기)
      • 어떤 프로세스를 중단 설정/해제 시킬 것인가?
      • 준비→중단 되었다면 반드시 중단→준비 로 돌아간다. 대기도 마찬가지
  1. 단기 (준비 ↔ 실행)
      • 어떤 프로세스를 실행시키고 중단시킬 것인가?
      요약
      notion image
      • 비선점형(OS가 제어권을 강제로 회수하지 않는다)
        • FCFS (First Come First Served)
        • SJF (Shortest Job First)
      • 선점형(OS가 제어권을 강제로 회수한다)
        • R.R (Round-Robin)
        • SRTF (Shortest Remain Time First)
        • 멀티 레벨 스케쥴링

스레드

  • 프로세스 위에서 작동하면서 작업 흐름의 단위

Context Switch

프로세스의 Context Switch

  • 코어 위의 프로세스 전체를 교체하는 작업
  • PCB에 진행 중인 프로세스를 save / 진행 할 프로세스의 PCB를 load 한다.

스레드의 Context Switch

  • Stack을 교체하는 작업

비교

  • 스레드에 비해 프로세스 Context Switch는 교체해야 할 save/load 비용이 크다.
→ 즉, 오버헤드 비용이 크다.

동시성과 병렬성

동시성

  • 하나의 코어에서 여러 작업을 번갈아 작업

병렬성

  • 물리적인 시간으로 동시에 여러 코어에서 작업하는 것

멀티 프로세스

  • 하나의 프로그램이 여러 프로세스로 구성하는 것

멀티 스레드

  • 여러 스레드를 생성해 각자 다른 작업을 수행시키는 것
  • 단점: 하나의 스레드가 멈춰 버리면 다른 스레드에도 영향을 준다.
 

+) 멀티 태스킹

  • 하나의 코어가 여러 프로세스를 번갈아 작업을 수행하는 것

+) 멀티 프로세싱

  • 여래 개의 코어에서 여러 프로세스가 병렬적으로 수행되는 것
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Share article

오니의 개발 블로그