쉽게 배우는 운영체제 1장 ~ 5장 정리

쉽게 배우는 운영체제 1장 ~ 5장 정리

Category
Computer Science
Tags
OS
Published
September 1, 2025
Last updated
Last updated November 11, 2025

C01 운영체제 개요

01 운영체제의 개념

  • 운영체제의 역할과 목표
    • 자원 관리 → 효율성
    • 자원 보호 → 안정성
    • SW 인터페이스 제공 → 편리성
    • HW 인터페이스 제공 → 확장성

02 컴퓨터의 발전 과정

03 운영체제의 구성

  • 사용자 인터페이스
  • 커널: 프로세스 관리, 메모리 관리, 저장장치 관리, 입출력 관리
 
  • 커널은 공식적인 요청을 거쳐야만 자원을 사용할 수 있게 제한함 → 그것이 시스템 호출
    • 즉 직접 app이 자원에 직접 접근하는게 아닌 시스템 함수를 통해 접근
  • 이중 모드 연산
    • 파일 저장이나 네트워크 데이터 전송등 자원에 접근하는 작업은 시스템 호출이 되면 → 커널 모드로 전환고 → 실행된다
  • 디바이스 드라이버
    • 마우스, 키보드등 주변 장치를 관리
    • 디바이스 드라이버는 커널과 HW사이의 인터페이스다

커널 구조

  • 단일형 구조
  • 계층형 구조
  • 마이크로 구조
💡
이후 정리 p48

04 운영체제의 종류

  • 유닉스 계열 운영체제
  • 개인용 컴퓨터 운영체제
  • 모바일 운영체제

C02 컴퓨터의 구조와 성능 향상

01 컴퓨터의 기본 구성

02 CPU와 메모리

  • 버스의 구조
    • 제어 버스
    • 주소 버스
    • 데이터 버스
  • 메모리의 종류
    • 저장장치 계층구조
      • 레지스터 1ns - 바이트
      • 캐시 2ns - 메가바이트
      • 메인 메모리 20ns - 기가 바이트
      • 보조 저장장치 100ns - 테라바이트

03 컴퓨터 성능 향상 기술

  • 버퍼
    • 스풀(SPOOL - Stimultaneous Peripheral Operation On-Line)
      • CPU와 입출력 장치가 독립적으로 동작하도록 돕는다
      • 예시) 프린터 출력에 사용도는 스풀러
    • 캐시
  • 인터럽트와 DMA
    • 입출력 관리자와 인터럽트
    • 인터럽트 방식의 입출력 과정
      • 인터럽트 번호(IRQ)
      • 인터럽트 벡터
    • 직접 메모리 접근과 메모리 맵 입출력
      • DMA(직접 메모리 접근)
      • 메모리 맵 입출력(MNIO)
  • 멀티프로세싱
    • 멀티프로세서 시스템: 2개 이상의 CPU를 장착하는 시스템
    • 멀티코어 시스템
    • 명령어 병렬처리
      • 하나의 코어에서 여러 개의 명령어를 동시에 실행하는 방법
      • 인텔 CPU에서는 하이퍼 스레딩이라고 부른다
💡
키워드 SIMD
명령어 하나에 데이터가 여러개들어갈 수 있는데
여기서 어떻게든 다중 명령을 수행하기 위해 2개로 늘여서 처리한건데, 이걸 더 늘이려면 simd 한계 때문에 처리가 안된다
  • 버퍼의 문제와 해결 방안
    • 버퍼 오버플로우와 scanf() → scanf_s()
    • 키보드 버퍼와 scanf()
    • 모니터 버퍼
    • 하드웨어 안전 제거와 플러시
    • 키보드 버퍼의 보안

C03 프로세스

01 프로세스의 개념과 상태

 

02 프로세스 제어 블록과 문맥 교환

  • 프로세스 제어 블록(PCB)
  • 문맥 교환(context switching)
    • 타임 슬라이스의 크기: 10~200ms

03 프로세스 계층 구조

  • 프로세스 계층구조의 필요성
    • 가비지 컬렉션
    • init과 systemd
💡
service → init
systemctl → systemd
  • 프로세스 생성 시스템 호출
    • 자식 프로세스를 생성하는 fork()
  • 프로세스 재사용 시스템 호출
    • 프로세스를 재사용하는 exec()
      • PCB는 유지되며 코드영역만 새로운 코드로 완전히 교체
      • 데이터 영역은 리셋됨
    • 유닉스 셸에서 fork()와 exec()을 함께 사용하기
  • 프로세스 동기화
    • 부모가 자식 프로세스를 기다리게 하는 wait()

04 프로세스의 데이터 영역

  • 데이터 영역
    • 코드 영역
    • 정적 데이터 영역
    • 힙 영역
    • ~
    • 스택 영역
  • 프로세스의 가변적 영역
    • 스택

C04 스레드와 프로세스 간 통신

01 스레드의 개념과 특징

  • 스레드의 개념
    • 멀티태스킹과 멀티스레딩
      • 멀티 태스킹: 프로세스간 각자의 작업을 수행, 프로세스 간 통신(IPC) 사용, 독립적인 메모리 공간
      • 멀티스레딩: 하나의 프로세스 내에서 여러 개의 스레드가 동시에 작업하는 방식
  • 멀티스레드의 장단점
    • 장점
      • 자원 공유: 코드, 전역 데이터, 파일이 공유됨
      • 문맥 교환이 효율적: 문맥 교환시 변경할 정보가 상대적으로 적음
      • 응답속도 향상: 입출력 스레드만 대기 상태가 되고 나머지는 계속 실행
      • 적응성 향상: 멀티코어 환경 최적화
    • 단점
      • 모든 스레드가 프로세스와 운영을 함께한다: 예) 웹브라우저에서 한 탭이 오류면 전체가 종료

02 스레딩

  • 멀티스레딩 모델
    • 1 to N 모델: 사용자 스레딩
      • 장점: 낮은 문맥 교환 비용 - 커널의 개입 없이 스레드를 전환해서
      • 단점: 입출력 대기 비효율 - 커널 스레드가 입출력을 위해 멈추면 모든 사용자 스레드가 멈춤
      • 단점: 멀티코어 활용 불가능
      • 단점: 보안 취약
    • 1 to 1 모델: 커널 스레딩
      • 단점: 높은 문맥 교환 비용 - 커널이 직접 스레드를 관리해 문맥 교환시 오버헤드 발생
      • 장점: 입출력 대기 효율
      • 장점: 멀티코어 활용 가능
      • 장점: 안정성
    • M to N 모델: 멀티레벨 스레딩
      • 장점: 입출력 대기 유연성 - 하나의 커널 스레드가 대기일 때 다른 커널 스레드가 대신 작업
      • 장점: 멀티코어 활용 가능
      • 단점: 높은 문맥 교환 비용
      • 단점: 스케쥴링 및 동기화가 복잡함
  • 스레드 코드
    • 유닉스에서 스레드 만들기
    • 자바에서 스레드 만들기
      • 자바는 별도의 라이브러리 없이 자체적으로 스레드를 지원한다 → Thread 클래스
    • 자바에서 스레드 동기화하기
      • try - catch와 스레드를 기다리는 .join()을 사용

03 프로세스 간 통신

  • 프로세스 간 통신의 개념
    • 프로세스 간 통신 기법의 종류
      • 공유 메모리 밑 공유 파일
        • 원시적인 프로세스 간 통신 방법
      • 파이프 통신
        • 동일 컴퓨터에서 통신의 사용
      • 소켓 통신
        • 다른 컴퓨터간 통신에 사용
    • 데이터 전달 방향에 따른 통신 분류
      • 단방향 통신
      • 양방향 통신
      • 반양방향 통신 - 동시에 송수신을 불가능 ex) 무전기
    • 동기화 통신과 비동기화 통신
      • 비동기화 통신 - 데이터가 언제 도착할지 모름
        • 논 블로킹 방식 통신, while등으로 계속 도착할 때 까지 기다리기 → busy waiting
      • 동기화 통신
        • 데이터가 도착할 떄까지 OS가 알아서 대기해줌 → non busy waiting
  • 프로세스 간 통신 기법
    • 프로세스의 파일 접근
    • 파이프 통신
      • OS가 동기화 처리를 해줘 부모 프로세스는 바쁜 대기를 하지 않아도 됨
  • 네트워크 통신 이해하기
    • TCP/IP
    • 소켓 통신

04 프로세스 간 통신 코드

  • 파일 입출력
    • 파일 포인터
    • fork()와 파일 기술자
      • fork()시 fd가 공유되어 부모/자식 프로세스가 같은 파일을 읽고 쓸 수 있다
      • 파일 접근에는 파이프 통신과 달리 동기화 기능이 없다
  • 파이프 코드를 통한 부모-자식 프로세스 간 통신
    • 파이프는 단방향 통신을 제공
  • 소켓 코드를 통한 네트워크 기반 통신
    • 소켓 코드의 구조
    • 클라이언트 코드 분석
    • 서버 코드 분석

C05 CPU 스케쥴링

01 CPU 스케쥴링의 개요

  • CPU 스케쥴링
    • 단계별 스케쥴링
      • 고수준: 전체 프로세스의 개수를 결정하는 단계
        • long-term 스케쥴링 또는 job 스케쥴링이라고 함
      • 중수준: 프로세스 수를 조절하여 시스템 과부하를 방지하는 단계
      • 저수준: 활성화된 프로세스가 실제로 실행되는 단계
        • CPU 스케쥴링에서 대부분의 작업이 저수준 스케쥴링이다
    • 선점형 스케쥴링과 비선점형 스케쥴링
      • 선점형 스케쥴링
        • 시분할 시스템과 인터럽트
        • 컨텍스트 스위칭으로 낭비가 생기는 단점
        • 그러나 빠른 응답 시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합
      • 비선점형 스케쥴링
        • 옛날 배치 작업에서 주로 사용했다
        • 선점형 스케쥴링에서도 시스템 백업 프로세스는 비선점형 방식으로 처리된다
    • CPU 스케쥴링의 목표
  • 우선순위와 CPU 스케쥴링
    • 우선순위의 개념과 필요성
    • 우선순위의 주요 결정 기준
      • CPU-bound 프로세스와 I/O-bound 프로세스
        • I/O-bound 프로세스의 우선순위를 높게
      • 전면 프로세스와 후면 프로세스
      • 고정 우선순위와 변동 우선순위
      • 준비 큐와 대기 큐
        • 준비 상태에서 우선순위별 준비 큐가 있다
        • 대기 상태에서도 입출력 장치마다 대기 큐가 존재

02 CPU 스케쥴링 알고리즘

  • CPU 스케쥴링 알고리즘 종류와 평가
    • CPU 스케쥴링 알고리즘 종류
      • 비선점형
        • FCFS(선입선출), SJF(최단 작업 우선), HRN(최고 응답 우선)
      • 선점형
        • RR, SRT(최소 잔여 시간)
        • 고정형 우선순위 선점형 스케쥴링 알고리즘 - MLQ(다단계 큐)
        • 이걸 개선한게 다단계 피드백 큐(MLFQ)
    • CPU 스케쥴링 알고리즘의 평가 기준
      • CPU 사용률
      • 처리량
      • 대기 시간
      • 응답 시간
      • 반환 시간
  • 선입선출(FCFS) 스케쥴링
  • 최단 작업 우선(SJF) 스케쥴링
  • 최고 응답 우선(HRN) 스케쥴링
    • 대기시간과 실행시간을 모두 고려하여 우선순위를 결정
  • 라운드 로빈(RR) 스케쥴링
  • 최소 잔여 시간(SRT) 스케쥴링
  • 우선순위를 고려한 스케쥴링
  • 다단계 큐(MLQ) 스케쥴링
    • 각 단계는 라우드로빈 방식으로 운영된다
    • 우선순위가 낮을수록 타임 슬라이스 크기가 커진다
  • 다단계 피드백 큐(MLFQ) 스케쥴링
    • 프로세스의 우선순위가 동적으로 변하는 변동 우선순위 방식
    • CPU를 사용하면 우선순위가 한 단계씩 낮아진다
    • 오래 대기하면 우선순위가 상대적으로 높아진다
💡
우선순위가 다시 높아지지는 않는지?

03 멀티프로세서 스케쥴링

  • 멀티프로세서 스케쥴링의 고려 사항
    • 비대칭형 스케쥴링과 대팅형 스케쥴링
      • 비대칭형 스케쥴링: 하나의 프로세서가 스케쥴링 역할, 단순한 시스템에서 사용
      • 대칭형 스케쥴링: 모든 프로세서가 독립적으로 스케쥴링을 수행
    • CPU 선호도: 동일한 프로세스에 속한 스레드를 계속 같은 코어에서 실행시킴
      • CPU 선호도(affinity), 프로세스 선호ㅗㄷ, 코어 선호도, 캐시 선호도라고 부름
  • 단일 큐 멀티프로세서 스케쥴링(SQMS)
    • 모든 스레드를 하나의 큐에 넣어 스케쥴링 하기
    • CPU 선호도 구현이 어려움
  • 다중 큐 멀티프로세서 스케쥴링(MQMS)
    • 부하 불균형이 발생할 수 있음
    • 그래서 작업 훔치기(작업이 없는 큐에서 작업을 가져오기)를 사용 → CPU 선호도가 해쳐짐