minzee
개발 기록장
minzee
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • 회고록 (0)
    • 활동 (15)
      • 우아한테크코스 7기 FE 프리코스 (4)
      • 원티드 프리온보딩 FE 챌린지 (1)
      • 위니브 엠버서더 3기 (10)
    • CS 공부 (5)
    • 코테 공부 (44)
      • BOJ (33)
      • Computer Algorithm (10)
      • Data Structures (1)
    • 개발 공부 (25)
      • Modern JS Deep Dive (5)
      • JavaScript & TypeScript (3)
      • React (0)
      • React-Native (0)
      • HTML & CSS (7)
      • Git & GitHub (1)
      • Kotlin (2)
      • Python (3)
      • C++ (2)
      • Linux (1)
    • 학교 (3)
      • 2 - 1 학기 (3)
      • 4 - 1 학기 (0)
    • 자격증 (1)
      • TOPCIT (0)
      • 정보처리기사 (1)
      • SQLD (0)

블로그 메뉴

  • Github
  • Naver Blog
  • Instagram
hELLO · Designed By 정상우.
minzee

개발 기록장

[면접을 위한 CS 전공 지식 노트] 3주차 - 3장 운영체제
CS 공부

[면접을 위한 CS 전공 지식 노트] 3주차 - 3장 운영체제

2025. 4. 9. 20:48

3.1 운영체제와 컴퓨터

운영체제의 역할와 구조

역할

  • CPU 스케줄링 & 프로세스 관리
  • → CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리
  • 메모리 관리
  • → 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리
  • 디스크 파일 관리
  • → 디스크 파일을 어떠한 방법으로 보관할지 관리
  • I/O 디바이스 관리
  • → 마우스, 키보드와 컴퓨터 간에 데이터를 주고받는 것을 관리

구조

GUI graphical user interface

사용자가 전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용할 수 있게 함

CUI character user interface

그래픽이 아닌 명령어로 처리하는 인터페이스

*Linux Server : CUI만 있고 GUI가 없음

드라이버 driver

HW를 제어하기 위한 SW

시스템콜

  • OS가 커널에 접근하기 위한 인터페이스
  • 유저 프로그램이 OS의 서비스를 받기 위해 커널 함수를 호출할때 사용
  • 유저 프로그램이 I/O 요청으로 트랩 trap 발동하면 올바른 I/O 요청인지 확인
    → 유저 모드가 시스템콜을 통해 커널 모드로 변환되어 실행
    cf) I/O 요청 ⇒ 입출력 함수, DB, 네트워크, 파일 접근 등에 관한 일
     
  • ex) I/O 요청인 fs.readFile()이라는 파일 시스템의 파일 읽는 함수가 발동한 경우
       ⇒ 유저 모드에서 파일을 읽지 않고, 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아간 후 뒤에 있는 유저 프로그램 로직 수행 
    • 컴퓨터 자원에 직접적인 접근 차단 가능
    • 프로그램을 다른 프로그램으로부터 보호 가능

  • 프로세스 or 스레드에서 OS로 어떠한 요청할 때 시스템콜와 커널을 거쳐 OS에 전달됨
  • 시스템콜은 하나의 추상화 계층
    ⇒ 장점: 추상화 계층이므로 네트워크 통신이나 데이터베이스 같은 낮은 단계의 영역 처리를 크게 신경쓰기 않고 프로그램 구현 가능

modebit

⇒ 1 or 0의 값을 가지는 플래그 변수

  • 시스템콜이 작동될 때 modebit을 참고해서 유저 모드와 커널 모드를 구분함
  • 운영체제를 통해 작동하게 해서 외부 공격을 막기 위한 장치
  • 0 ⇒ 커널 모드, 1 ⇒ 유저 모드

modebit은 시스템콜에서 사용되는 인자 값의 한 종류

유저 모드

유저가 접근할 수 있는 영역을 제한해 컴퓨터 자원에 함부로 침범하지 못하도록 하는 모드

커널 모드

모든 컴퓨터 자원에 접근할 수 있는 모드

커널

운영체제의 핵심부분

시스템콜 인터페이스 제공

보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청관리 등 운영체제의 중추 역할 수행

컴퓨터의 요소

⇒ 컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어짐

CPU central processing unit

⇒ 산술논리연산장치, 제어장치, 레지스터로 구성되어 있는 컴퓨터 장치를 말함

  • 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행
  • OS의 커널이 프로그램을 메모리에 올려 프로세스를 만들면 CPU가 처리함

제어장치 CU control unit

⇒ 프로세스 조작을 지시하는 CPU의 한 부품

  • 입출력 장치 간 통신을 제어
  • 명령어들을 읽고 해석
  • 데이터 처리를 위한 순서 결정

레지스터 register

⇒ CPU안에 있는 매우 빠른 임시기억장치

  • CPU와 직접 연결되어 있기에 연산 속도가 메모리보다 매우 빠름
  • CPU는 자체적으로 데이터를 저장할 방법이 없기에 레지스터를 거쳐 데이터를 전달

산술논리연산장치 ALU arithmetic logic unit

⇒ 덧셈, 뺄셈 같은 두 숫자의 산술 연산, 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로

<CPU의 연산 처리>

  1. 제어장치가 메모리에 계산할 값을 로드함. 그리고 레지스터에서도 로드함
  2. 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령함
  3. 제어장치가 계산된 값을 다시 ‘레지스터에서도 메모리’로 계산한 값을 저장

인터럽트

⇒ 어떤 신호가 들어왔을때 CPU를 잠깐 정지시키는 것

  • 인터럽트가 발생하면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행됨
  • 인터럽트가 발생하는 원인
    • 키보드, 마우스 등의 IO 디바이스
    • 0으로 숫자를 나누는 산술연산
    • 프로세스 오류
  • 인터럽트 간에 우선순위가 있음
  • 인터럽트의 종류
    • 하드웨어 인터럽트
    • 소프트웨어 인터럽트

인터럽트 핸들러 함수

  • 인터럽트가 발생했을 때 이를 핸들링하기 위한 함수
  • 커널 내부의 IRQ를 통해 호출됨
  • request_irq()를 통해 인터럽트 핸들러 함수 등록 가능

하드웨어 인터럽트

  • IO 디바이스에서 발생하는 인터럽트 (키보드 연결, 마우스 연결 등)
  • 인터럽트 라인 설계 이후 순차적인 인터럽트 실행 중지
  • 운영체제에 시스템콜을 요청해서 원하는 디바이스에 있는 작은 로컬 버퍼에 접근해 일 수행

소프트웨어 인터럽트

⇒ 트랩 trap이라고도 함

  • 프로세스 오류 등으로 프로세스가 시스템콜 호출 시 발동

DMA 컨트롤러

⇒ I/O device가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치

  • CPU에만 너무 많은 인터럽트 요청이 들어오기 때문에 CPU 부하를 막아주며 CPU의 일을 부담하는 보조 역할
  • 하나의 작업을 CPU와 DMA 컨트롤러가 동시에 하는 것을 방지

메모리 memory

⇒ RAM random access memory을 일컬어 메모리라고도 함

  • 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치
  • 기억을 담당
  • cf) CPU는 계산을 담당
  • 메모리가 크면 클수록 많은 일을 동시에 할 수 있음

타이머 timer

⇒ 몇초 안에는 작업이 끝나야 한다는 것을 정하고 특정 프로그램에 시간 제한을 다는 역할

  • 시간이 많이 걸리는 프로그램이 작동할때 제한을 걸기 위해 존재함

디바이스 컨트롤러 device controller

⇒ 컴퓨터와 연결되어 있는 IO devices의 작은 CPU

  • 옆에 붙어 있는 로컬 버퍼는 각 디바이스에서 데이터를 임시로 저장하기 위한 작은 메모리를 뜻함

3.2 메모리

메모리 계층

⇒ 레지스터, 캐시, 메모리, 저장장치로 구성

  • 레지스터
    • CPU 안에 있는 작은 메모리
    • 휘발성
    • 속도 가장 빠름
    • 기억 용량 가장 적음
  • 캐시
    • L1, L2 (+L3) 캐시
    • 휘발성
    • 속도 빠름
    • 기억 용량 적음
  • 주기억장치
    • RAM
    • 휘발성
    • 속도 보통
    • 기억 용량 보통
  • 보조기억장치
    • HDD, SSD
    • 비휘발성
    • 속도 느림
    • 기억 용량 많음

램 RAM

⇒ 하드디스크로부터 일정량의 데이터 복사해서 임시 저장하고 이를 필요할 때마다 CPU에 빠르게 전달하는 역할

  • 계층 위로 올라갈수록 가격 ⬆️, 용량 ⬇️, 속도 ⬆️
  • 메모리의 계층이 존재하는 이유
    • 경제성
    • 캐시

캐시 cache

⇒ 데이터를 미리 복사해 놓은 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이는 역할

  • 데이터 접근하는 시간이 오래 걸리는 경우를 해결
  • 무언가를 다시 계산하는 시간을 절약할 수 있음

캐싱 계층

⇒ 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층

  • ex) 메모리와 CPU 사이의 속도 차이가 크기 때문에 중간에 레지스터 계틍을 둬서 속도 차이 해결
  • ex) 캐시 메모리와 보조기억장치 사이에 있는 주기억장치 → 보조기억장치의 캐싱 계층

지역성의 원리

  • 캐시 계층을 두는 것 말고 캐스를 직접 설정할 때는?
  • → 자주 사용하는 데이터를 기반으로 설정해야 함

⇒ 자주 사용되는 데이터에 대한 근거가 지역성

  • 지역성의 종류
    • 시간 지역성 temporal locality
    • 공간 지역성 spatial locality

시간 지역성 temporal locality

⇒ 최근 사용한 데이터에 다시 접근하려는 특성

  • ex) for문 코드 안의 변수 i에 계속해서 접근하는 경우
let arr = Array.from({length : 10}, ()=> 0);
console.log(arr)
for (let i = 0; i < 10; i += 1) {
    arr[i] = i;
}
console.log(arr)
/*
[
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0
]
[
    0, 1, 2, 3, 4,
    5, 6, 7, 8, 9
]
*/

공간 지역성 spatial locality

⇒ 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성

  • ex) 앞 코드에서 공간을 나태는 배열 arr의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근함

캐시히트 & 캐시미스

  • 캐시히트 cache hit
    • 캐시에서 원하는 데이터를 찾았을때
    • 원하는 데이터를 제어장치를 거쳐 가져옴
    • ⇒ 위치 가깝고, CPU 내부 버스를 기반으로 작동하므로 속도 빠름
  • 캐시미스 cache miss
    • 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것
    • 원하는 데이터를 메모리에서 가져옴
    • ⇒ 시스템 버스를 기반으로 작동하므로 속도 느림

캐시매핑 cache mapping

⇒ 캐시가 히트되기 위해 매핑하는 방법을 말함

  • CPU의 레지스터와 주메모리(=RAM) 간에 데이터를 주고받을 때를 기반으로 설명
  • 레지스터는 RAM에 비하면 작고, RAM은 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘해주려면 매핑 어떻게 하느냐가 중요함
  • 캐시 매핑 분류
    1. 직접 매핑 directed mapping
      • 메모리 블록을 정해진 하나의 캐시 블록에만 매핑
      • 처리가 빠름
      • 충돌 발생이 잦음
    2. 연관 매핑 associative mapping
      • 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑
      • 충돌이 적음
      • 속도가 느림
    3. 집합 연관 매핑 set associative mapping
      • 직접 매핑과 연관 매핑을 합침
      • 순서는 일치시키지만 집합을 둬서 저장
      • 메모리 블록을 정해진 블록의 집합 내 어디든 매핑
      • 검색 효율적

웹 브라우저의 캐시

⇒ 쿠키, 로컬 스토리지, 세션 스토리지

  • 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰이며 origin에 종속됨ex) https://example.com:443
    • 프로토콜: https
    • 호스트: example.com
    • 포트: 443
    • 웹 브라우저의 캐시가 오리진에 종속된다 = 캐시된 데이터가 특정 오리진 (프로토콜, 호스트, 포트의 조합)에만 적용되고, 동일한 오리진을 공유하는 경우에만 해당 데이터가 사용됨
  • cf) 오리진 origin ⇒ URL의 프로토콜, 호스트(도메인), 포트 번호를 합친 것
  • 쿠기
    • 만료기한이 있는 키-값 저장소
    • same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송됨
    • 4KB까지 데이터 저장 가능
    • 만료기한 설정 가능
    • 쿠키 설정 시 document.cookie로 쿠키를 볼 수 없도록 httponly 옵션 걸어야 함
    • 클라이언트 또는 서버에서 만료기한 설정 가능 => 보통 서버에서 설정
  • 로컬 스토리지
    • 만료기한이 없는 키-값 저장소
    • 5MB까지 데이터 저장 가능
    • 웹브라우저 닫아도 유지됨
    • HTML5를 지원하지 않는 웹 브라우저에서는 사용 불가
    • 클라이언트에서만 수정 가능
  • 세션 스토리지
    • 만료기한이 없는 키-값 저장소
    • 탭 단위로 세션 스토리지 생성
    • 탭 닫으면 해당 데이터 삭제됨
    • 5MB까지 데이터 저장 가능
    • HTML5를 지원하지 않는 웹 브라우저에서는 사용 불가
    • 클라이언트에서만 수정 가능

데이터베이스의 캐싱 계층

  • 데이터베이스 시스템 구축 시 메인 데이터베이스 위에 레디스(redis) 데이터베이스 계층을 '캐싱 계층'으로 두어 성능 향상시킴

메모리 관리

=> 운영체제가 하는 일 (컴퓨터 내의 한정된 메모리를 극한으로 활용)

가상 메모리 virtual memory

⇒ 메모리 관리 기법의 하나로 컴퓨터가 실제로 사용 가능한 메모리 자원 추상화

  • 사용자들에게 매우 큰 메모리로 보이도록 함

  • 가상 메모리는가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어 있는 '페이지 테이블'로 관리됨 → 이때 속도 향상을 위해 TLB 사용함
  • TLB translation lookaside buffer 페이지 정보 캐시

⇒ 주소 변환을 위해 메모리와 CPU 사이에 있는 캐시

  • 페이지 테이블에 있는 리스트 보관하여 CPU가 페이지 테이블까지 갈 필요 없도록 해 속도 향상시키는 캐시 계층
  • 가상 주소 logical address
  • ⇒ 가상적으로 주어진 주소
  • 실제 주소 physical address
  • ⇒ 실제 메모리상에 있는 주소
  • 메모리관리장치 MMU memory management unit
  • ⇒ 가상 주소를 실제 주소로 변환되며 사용자는 실제 주소를 의식하지 않고 프로그램 구축 가능

스와핑 swapping

⇒ 페이지 폴트 발생 시 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 메모리처럼 불러와 사용하는 것

  • 페이지 폴트가 발생하지 않은 것처럼 만듦

페이지 폴트 page fault

  • 프로세스가 참조하려는 가상 메모리 페이지가 물리적 메모리에 현재 로드되어있지 않을 때 발생
  • 프로세스가 필요로 하는 페이지를 효율적으로 로드·관리하는데 필요
  • 물리적으로 메모리의 크기가 한정되어 있어도 프로세스가 더 큰 가상 메모리 공간을 사용할 수 있도록 함
  • 페이지 폴트와 스와핑 과정
    1. 어떤 명령어가 유효한 가상 주소에 접근했으나 해당 페이지가 없다면 트랩 발생 => 운영체제에 알림
    2. 운영체제는 실제 디스크에서 사용되지 않는 프레임 찾음
    3. 해당 프레임을 실제 메모리에 가져와서 페이지 교체 알고리즘을 사용해 특정 페이지와 교체함 (이때 스와핑 발생)
    4. 페이지 테이블 갱신한 후 해당 명령어 다시 시작

cf) 페이지 page ⇒ 가상 메모리를 사용하는 최소 크기 단위

프레임 frame ⇒ 실제 메모리를 사용하는 최소 크기 단위

스레싱 thrashing

⇒ 메모리의 페이지 폴트 page fault율이 높은 것

  • 운영체제가 대부분의 시간을 페이지 교체, 디스크 I/O 작업에 소비하므로 컴퓨터의 성능 저하 초래

  • 메모리에 너무 많은 프로세스가 동시에 올라감 → 스와핑 많이 일어나서 발생
  • 페이지 폴트 발생→ 가용성 높이기 위해 더 많은 프로세스 메모리에 올림
  • → 악순환 반복되며 스레싱 발생
  • → CPU 이용률 ⬇️
  • 해결 방법
    • 메모리 늘림
    • HDD를 SSD로 바꿈
    • 작업 세트
    • PFF

작업세트 working set

⇒지역성(프로세스의 과거 사용 이력)을 통해 결정된 페이지 집합 만들어서 미리 메모리에 로드하는 것

  • 미리 메모리에 로드 → 탐색에 드는 비용, 스와핑 ⬇️

PFF page fault frequency

⇒ 페이지 폴트 빈도 조절하는 방법

  • 상한선와 하한선을 만드는 방법
  • 상한선에 도달 → 프레임 늘림
  • 하한선에 도달 → 프레임 줄임

메모리 할당

⇒ 시작 메모리 위치, 메모리의 할당 크기를 기반으로 메모리에 프로그램 할당

  • 메모리 할당 종류
    • 연속 할당
    • 불연속 할당

연속 할당

⇒ 메모리에 '연속적'으로 공간 할당

  • 고정 분할 방식 fixed partition allocation
    • 메모리 미리 나뉘어 있음 → 융통성 X
    • 내부 단편화 발생
  • ⇒ 메모리를 미리 나눠 관리하는 방식
  • 가변 분할 방식 variable partition allocation
    • 내부 단편화 발생 X
    • 외부 단편화 발생 O
    가변 분할 방식의 종류
    • 최초적합 first fit
      • 위쪽이나 아래쪽부터 시작해서, 홀을 찾으면 바로 할당
    • 최적적합 best fit
      • 프로세스보다 크기가 큰 공간 중 가장 작은 홀부터 할당
    • 최악적합 worst fit
      • 프로세스의 크기와 가장 차이가 많이 나는 홀에 할당
  • ⇒ 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눔

내부 단편화 internal fragmentation

⇒ 메모리를 나눈 크기 > 프로그램

  • 남는 공간이 많이 발생하는 현상

외부 단편화 external fragmentation

⇒ 메모리를 나눈 크기 < 프로그램

  • 들어가지 못하는 공간이 많이 발생하는 현상

홀 hole

⇒ 할당할 수 있는 빈 메모리 공간

불연속 할당

⇒ 메모리를 '불연속'적으로 할당하는 방법이며 현대 운영체제에서는 페이징 기법을 활용

  • 페이징 paging
    • 장점: 홀의 크기 균일
    • 단점: 주소 변환 복잡
  • ⇒ 메모리를 동일한 크기의 페이지 (보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램 할당
  • 세그멘테이션 segmentation
    • 메모리 → 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 구성
    • 코드-데이터로 나누거나 코드 내의 작은 함수를 세그먼트로 나눌 수도 있음
    • 장점: 공유 쉬움, 보안 좋음
    • 단점: 홀 크기 균일하지 않음
  • ⇒ 페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나눔
  • 페이지드 세그멘테이션 paged segmentation
    • 프로그램을 의미 단위인 세그먼트로 나누고, 임의의 길이가 아닌 동일한 크기의 페이지 단위로 나눔
    • 공유, 보안 측면에 강점

페이지 교체 알고리즘

  • 페이지 교체 알고리즘 기반으로 스와핑 발생
  • 스와핑은 많이 일어나지 않도록 설계되어야 함
  • 오프라인 알고리즘 offline algorithm
    • 가장 좋은 방법
    • but 미래에 사용되는 프로세스 알 수 없음
    • → 다른 알고리즘과의 성능 비교를 위한 상한기준(upper bound) 제공
  • ⇒ 먼 미래에 참조되는 페이지와 현재 할당하는 페이지 바꾸는 알고리즘
  • FIFO first in first out
  • ⇒ 가장 먼저 온 페이지를 가장 먼저 교체하도록 하는 방법
  • LRU least recently used
    • 단점: 오래된 것 파악 위해 각 페이지마다 계수기, 스택 둬야 함
  • ⇒ 참조가 가장 오래된 페이지 교체
  • NUR not used recently
    • LRU에서 발전한 알고리즘
    • = clock 알고리즘
    • 시계방향으로 돌면서 0(참조되지 않은 비트)을 찾은 순간 해당 프로세스를 교체하고 해당 부분을 1(최근에 참조된 비트)로 바꿈
  • LFU least frequently used
  • ⇒ 가장 참조 횟수가 적은 페이지 교체

3.3 프로세스와 스레드

⇒ 프로세스: 컴퓨터에서 실행되고 있는 프로그램, CPU 스케줄링의 대상이 되는 작업 (task)

프로세스와 컴파일 과정

⇒ 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행할 수 있는 파일이 되는 것

전처리

⇒ 소스 코드의 주석을 제거하고 #include등 헤더 파일을 병합하여 매크로를 치환

컴파일러

⇒ 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환

어셈블러

⇒ 어셀블리어는 목적 코드 object code로 변환됨

링커

⇒ 실행 파일을 만듬 (.exe)

정적 라이브러리

⇒ 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식

동적 라이브러리

⇒ 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하는 방식

프로세스의 상태

생성 상태

⇒ fork() 또는 exec() 함수를 통해 생성된 상태 → 이때 PCB 할당

  • fork(): 부모 프로세스의 주소 공간을 그대로 복사. 새로운 자식 프로세스 생성.
  • exec(): 새롭게 프로세스 생성.

대기 상태

⇒ CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태

대기 중단 상태

⇒ 메모리 부족으로 일시 중단된 상태

실행 상태

⇒ CPU 소유권과 메모리를 할당받고 Instruction을 수행 중인 상태

중단 상태

⇒ 어떤 이벤트의 발생 이후 프로세스가 차단된 상태. I/O 디바이스에 의한 interrupt로 많이 발생

일시 중단 상태

⇒ 중단된 상태에서 프로세스가 실행되려 했지만 메모리 부족으로 일시 중단된 상태

종료 상태

메모리와 CPU 소유권을 모두 놓고 가는 상태

프로세스의 메모리 구조

  • 스택: 지역변수, 매개변수, 함수 저장. 컴파일 시에 크기 결정
  • 힙: 런타임 시에 크기 결정
  • 데이터 영역: 전역 변수, 정적 변수 저장
  • 코드 영역: 프로그램에 내장되어 있는 소스코드가 들어가는 영역

PCB process control block

⇒ 운영체제에서 프로세스에 대한 메타데이터를 저장한 '데이터'를 말함, 프로세스 제어 블록

  • 프로세스 스케줄링 상태, 프로세스 ID, 프로세스 권한, 프로세스 카운터, CPU 레지스터, CPU 스케줄링 정보, 계정 정보, I/O 상태 정보
  • 컨텍스트 스위칭: PCB를 교환하는 과정

멀티프로세싱

⇒ 여러개의 프로세스, 즉 멀티프로세스를 통해 동시에 두가지 이상의 일을 수행할 수 있는 것을 말함

웹 브라우저

  • 브라우저 프로세스
  • 렌더러 프로세스
  • 플러그인 프로세스
  • GPU 프로세스

IPC inter process communication

⇒ 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘

공유 메모리

⇒ 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것

파일

⇒ 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터

소켓

⇒ 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페스를 통해 전송하는 데이터

익명 파이프

⇒ 프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받음

명명 파이프

⇒ 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프를 말함

메시지 큐

⇒ 메시지를 큐 데이터 구조 형태로 관리하는 것

스레드와 멀티스레딩

  • 스레드: 프로세스의 실행 가능한 가장 작은 단위
  • 멀티스레딩: 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다.

공유 자원과 임계 영역

공유 자원: 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미

경쟁 상태: 이 공유 자원을 두 개 이사으이 프로세스가 동시에 읽거나 쓰는 상황

임계 영역: 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 영역

임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세가지가 있으며, 이 방법 모두 상호 배제, 한정 대기, 융통성 조건을 만족한다.

뮤텍스: 공유 자원을 사요하기 전에 설정하고 사용한 후에 해제하는 잠금

세마포어: 일반화된 뮤텍스

바이너리 세마포어: 0,1의 두가지 값만 가질 수 있는 세마포어, 구현의 유사성으로 인해 뮤텍스는 바이너리 세마포어라고 할 수 있다.

카운팅 세마포어: 여러 개의 값을 가질 수 있는 세마포어, 여러 자원에 대한 접근을 제어하는데 사용됨

모니터: 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공

교착 상태

교착 상태: 두 개 이상의 프로세스들이 서로 가진 자원을 기다리며 중단된 상태

교착 상태의 원인: 상호 배제, 점유 대기, 비선점, 환형 대기

3.4 CPU 스케줄링 알고리즘

CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당

비선점형 방식

⇒ 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다.

FCFS First Come, First Served

  • 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘

SJF: Shortest Job First

  • 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘

우선순위

⇒ 기존 SJF 스케줄리의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상이 있음, 오래된 작업일수록 우선순위를 높이는 방법을 통해 단점을 보완하는 알고리즘

선점형 방식

⇒ 현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식을 말한다.

라운드로빈

  • 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘

SRF

  • 중간에 실행시간이 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘

다단계 큐

  • 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것
저작자표시 (새창열림)

'CS 공부' 카테고리의 다른 글

[면접을 위한 CS 전공 지식 노트] 4주차 - 4장 데이터베이스  (0) 2025.04.16
[면접을 위한 CS 전공 지식 노트] 2주차 - 2장 네트워크  (1) 2025.04.02
[CS 스터디] 1주차 회고  (0) 2025.03.27
[면접을 위한 CS 전공 지식 노트] 1주차 - 1장 디자인 패턴 & 프로그래밍 패러다임  (0) 2025.03.26
    'CS 공부' 카테고리의 다른 글
    • [면접을 위한 CS 전공 지식 노트] 4주차 - 4장 데이터베이스
    • [면접을 위한 CS 전공 지식 노트] 2주차 - 2장 네트워크
    • [CS 스터디] 1주차 회고
    • [면접을 위한 CS 전공 지식 노트] 1주차 - 1장 디자인 패턴 & 프로그래밍 패러다임
    minzee
    minzee
    🇩🇮🇬🇮🇹🇦🇱 🇲🇪🇩🇮🇦 & 🇸🇴🇫🇹🇼🇦🇷🇪 🇨🇴🇳🇻🇪🇷🇬🇪🇳🇨🇪

    티스토리툴바