운영체제 1-5강

yoneeki·2025년 4월 5일

knou

목록 보기
8/14

운영체제 1강

운영체제란 무엇인가?


✅ 운영체제란?

  • 시스템 소프트웨어의 일종
  • 컴퓨터 하드웨어(CPU, 메모리, 저장장치 등)를 관리하고, 응용 프로그램 실행을 지원하는 프로그램들의 모음
  • 사용자와 하드웨어 사이의 매개체

✅ 운영체제의 목적

  • 자원 관리: CPU, 메모리, 입출력 장치 등
  • 편의성 제공: 사용자 명령 해석 및 실행
  • 효율성: 프로그램 간의 자원 분배, 멀티태스킹 지원
  • 안정성: 시스템의 예측 가능한 동작 보장

✅ 운영체제의 구조

● 계층 구조

사용자
  ↓
응용 프로그램
  ↓
운영체제
  ↓
하드웨어

✅ 실행 모드

  • 커널 모드: 운영체제 커널이 실행됨. 하드웨어 직접 제어 가능.
  • 사용자 모드: 일반 응용프로그램 실행. 제한된 권한.

✅ 커널 구조 유형

● 일체형 커널 (Monolithic Kernel)

  • 모든 OS 서비스가 커널 내부에 포함
  • 예: UNIX, Linux
  • 장점: 빠름, 효율적 상호작용
  • 단점: 하나의 오류가 전체 시스템에 영향을 줄 수 있음

● 마이크로커널 (Microkernel)

  • 최소한의 핵심 기능만 커널에 포함
  • 나머지는 외부 서비스로 분리
  • 장점: 유지보수 쉬움, 안정성 우수
  • 단점: 성능 저하 가능 (IPC 필요)

✅ 시스템 호출 (System Call)

  • 응용 프로그램이 운영체제의 기능을 요청하는 방식
  • 예: 파일 읽기/쓰기, 메모리 할당, 프로세스 생성

✅ 운영체제의 구성 요소

구성 요소설명
프로세스 관리자실행 중인 프로그램 관리
메모리 관리자RAM 사용 및 할당 관리
파일 관리자파일 및 디렉토리 관리
장치 관리자키보드, 마우스 등 I/O 장치 관리

✅ 운영체제의 유형

  • 일괄 처리 시스템 (Batch): 작업 모아서 순차 처리
  • 시분할 시스템 (Time Sharing): 사용자별 시간 할당
  • 실시간 시스템 (Real-Time): 정해진 시간 안에 응답 (예: 미사일, 증권)
  • 분산 시스템 (Distributed): 여러 컴퓨터가 네트워크로 연결

운영체제 2강

프로세스와 쓰레드


✅ 프로그램 vs 프로세스

항목프로그램프로세스
정의정적, 수동적 개체실행 중인 동적, 능동적 개체
실행 여부실행되지 않음CPU가 명령을 실행
자원 사용없음CPU, 메모리, 입출력, 파일 등 사용

✅ 프로세스의 메모리 구성

  • 코드 영역: 실행 코드
  • 데이터 영역: 전역 변수, 상수 등
  • 힙 영역: 동적 할당 메모리
  • 스택 영역: 함수 호출 스택 (지역변수, 반환주소 등)

✅ PCB (Process Control Block)

  • 운영체제가 프로세스를 관리하기 위해 사용하는 정보 구조체
  • 프로세스마다 하나씩 존재하며, 문맥 교환 시 사용

● 포함 정보:

  • 프로세스 ID (PID)
  • 프로세스 상태
  • 프로그램 카운터 (PC)
  • 레지스터 정보
  • 메모리 정보
  • 우선순위
  • 회계 정보 등

✅ 프로세스 상태와 전이

상태설명
생성프로세스 생성 요청됨
준비CPU 할당을 기다림
실행CPU에서 명령어 수행 중
대기입출력 또는 자원 요청으로 대기 중
종료프로세스 실행 완료 또는 강제 종료됨
  • 상태 전이 예시: 준비 → 실행 (디스패치), 실행 → 대기 (I/O 요청), 실행 → 종료 등

✅ 프로세스 생성 방식

● 사용자 실행

  • 사용자가 명령어로 직접 실행

● fork()

  • 자식 프로세스를 생성 (부모의 복제본)
  • PID 부여됨, 동일한 메모리 구조 복사

● exec()

  • 자식 프로세스가 새로운 프로그램을 실행

● CreateProcess()

  • 윈도우 시스템에서 사용

✅ 프로세스 종료

  • 정상 종료: 작업 완료 후 스스로 종료
  • 비정상 종료: 부모가 자식 강제 종료 (PID 이용)
  • 부모 종료 시 자식도 운영체제가 정리

✅ 쓰레드 (Thread)

  • 하나의 프로세스 내에서 실행 흐름을 나눔
  • 코드, 데이터, 힙은 공유 / 레지스터, 스택은 개별

● 장점

  • 병렬 처리 가능
  • 자원 사용 효율 높음
  • 여러 작업을 동시에 처리 (예: 계산, 입력, 백업 등)

● 구조 예시

  • 하나의 프로세스 메모리 구조 내에 여러 쓰레드 존재
  • 각 쓰레드는 독립된 PC(Program Counter), 레지스터, 스택 가짐

✅ 멀티쓰레드 처리

  • 여러 CPU에서 쓰레드를 병렬로 실행 가능
  • 병렬성 증가 → 처리 효율 향상

예:

  • CPU1: 계산용 쓰레드
  • CPU2: 입력 처리용 쓰레드
  • CPU3: 백업용 쓰레드

운영체제 3강

프로세스 스케줄링


✅ 프로세스 스케줄링이란?

  • 여러 작업(프로세스)의 실행 순서를 결정하는 것
  • CPU, 디스크 등 자원을 효율적으로 사용하기 위해 필수
  • 디스패처(dispatcher): 준비 큐에서 프로세스를 선택하여 CPU에 할당하는 역할

✅ 스케줄링 목표

  • 공정성: 모든 프로세스가 적절히 실행될 기회 제공
  • 효율성: 자원을 충분히 활용
  • 응답시간 최소화, 처리량 최대화, 대기시간 최소화

✅ 프로세스 상태와 스케줄링 단계

  • 상위 단계: 작업 큐 → 프로세스
  • 중간 단계: 실행/일시중지 제어
  • 하위 단계: 준비 큐 → 실행 (디스패치)

✅ 선점형 vs 비선점형

● 선점형

  • 실행 중인 프로세스를 강제로 중단하고 다른 프로세스 실행
  • 인터럽트, 문맥 교환 발생
  • 실시간/시분할 시스템에 적합

● 비선점형

  • 프로세스가 스스로 CPU를 반납할 때까지 실행
  • 오버헤드 없음, 짧은 작업이 대기 가능성 있음

✅ 문맥 교환 (Context Switch)

  • 현재 실행 중인 프로세스의 상태(레지스터, PC 등)를 PCB에 저장
  • 새로운 프로세스의 PCB 정보를 불러와 실행 상태로 전환

✅ 주요 스케줄링 알고리즘


1. FCFS (First Come First Serve)

  • 도착 순서대로 처리
  • 단점: 긴 프로세스가 짧은 프로세스를 지연시킴 (Convoy Effect)

2. SJF (Shortest Job First)

  • 실행 시간이 가장 짧은 프로세스부터 실행
  • 평균 대기시간 최소
  • 실행시간 예측 필요

3. SRT (Shortest Remaining Time)

  • SJF의 선점형 버전
  • 남은 시간이 가장 짧은 프로세스를 우선 실행
  • 오버헤드 존재

4. RR (Round Robin)

  • 시간 할당량(Time Quantum) 단위로 프로세스를 순환 실행
  • 시분할 시스템에 적합
  • 짧은 시간 할당량은 문맥 교환 오버헤드 증가

5. HRN (Highest Response Ratio Next)

  • 응답비율 = (대기시간 + 실행시간) / 실행시간
  • 오래 기다린 프로세스 우선
  • 공정성과 효율성 사이 균형

6. 다단계 피드백 큐

  • 여러 큐에서 우선순위 및 행동에 따라 프로세스를 이동시킴
  • I/O 위주 → 높은 우선순위 유지
  • 연산 위주 → 낮은 우선순위, 긴 할당량

✅ 평균 대기시간 vs 평균 반환시간

  • 대기시간: 준비 큐에서 대기한 총 시간
  • 반환시간: 생성 시점부터 종료까지 걸린 전체 시간

✅ 요약 비교

알고리즘방식특징
FCFS비선점형간단하나 짧은 작업 지연됨
SJF비선점형평균 대기시간 최소, 예측 필요
SRT선점형SJF 개선, 오버헤드 있음
RR선점형공정, 시분할에 적합, 시간할당 중요
HRN비선점형기다린 만큼 우선순위 상승
MLFQ선점형동작에 따라 우선순위 조정

운영체제 4강

병행 프로세스 (Concurrency)


✅ 병행 프로세스 개요

  • 여러 개의 프로세스 또는 쓰레드가 동시에 수행되는 시스템 특성
  • 자원을 공유하거나 독립적으로 실행됨

● 시스템 구조

  • 강결합 시스템: 공유 메모리 기반
  • 약결합 시스템: 분산 메모리 기반 (네트워크로 연결됨)

✅ 독립 vs 협력 프로세스

유형설명
독립- 다른 프로세스에 영향 없음
- 데이터 및 상태 공유하지 않음
- 결정적/재생 가능
협력- 다른 프로세스와 상호작용
- 데이터 및 상태 공유
- 비결정적/재생 불가능

✅ 병행성 문제: 임계 영역 (Critical Section)

  • 둘 이상의 프로세스가 동시에 접근하면 안 되는 코드 영역
  • 예: 잔고 업데이트 시 두 프로세스가 동시에 접근하여 값 꼬임

✅ 임계영역 조건

  1. 상호배제(Mutual Exclusion): 한 번에 하나의 프로세스만 접근
  2. 진행(Progress): 다른 프로세스가 진입하지 않으면 접근 가능
  3. 한정된 대기(Bounded Waiting): 대기 중인 프로세스는 유한 시간 내 진입 가능

✅ 프로세스 동기화 (Process Synchronization)

  • 서로 관련된 작업의 실행 순서를 조절
  • 예: 계좌 입금 → 출금이 순차적으로 수행되어야 정확

✅ 프로세스 간 통신 (IPC: Inter Process Communication)

  • 공유 변수 또는 메시지 전달로 데이터 교환

✅ 세마포어 (Semaphore)

  • 공유 자원 접근을 제어하기 위한 변수
  • 정수형 변수로, 자원의 상태 표현
  • 초기값:
    • mutex: 1 (상호배제용)
    • sync: 0 (동기화용)

✅ 세마포어 연산

// 진입 연산 (P)
void P(semaphore s) {
  if (s > 0)
    s--;
  else
    wait(); // 대기 큐에 넣고 블로킹
}

// 해제 연산 (V)
void V(semaphore s) {
  if (no waiters)
    s++;
  else
    wake_one(); // 대기 중인 프로세스 하나 깨움
}

✅ 세마포어를 이용한 임계영역 보호

P(mutex);
// 임계영역 (Critical Section)
V(mutex);
  • mutex는 상호배제용 세마포어
  • P(mutex): 임계영역 진입 시도
  • V(mutex): 임계영역 탈출 후 다음 프로세스 깨움

✅ 세마포어 활용 예 (Sync)

// 초기값: sync = 0

// 프로세스 A
V(sync);  // 먼저 처리 후, 다음 단계로 신호

// 프로세스 B
P(sync);  // A가 끝나야 실행됨
  • 특정 순서 보장 (A → B)

✅ 요약

  • 병행성은 현대 OS에서 필수 요소이며, 병렬 처리 효율성을 극대화함
  • 임계영역과 동기화 문제를 해결하기 위해 세마포어를 사용
  • 상호배제, 진행, 한정대기 등의 조건을 충족시켜야 신뢰성 있는 실행 가능

운영체제 5강

병행 프로세스 - 생산자-소비자 문제, 판독기-기록기 문제, IPC


✅ 생산자-소비자 문제 (Producer-Consumer)

  • 생산자: 데이터를 생성하여 버퍼에 넣는 프로세스
  • 소비자: 데이터를 버퍼에서 꺼내어 소비하는 프로세스

● 요구 사항

  • 상호배제(Mutex): 동시에 버퍼 접근 불가
  • 동기화(Sync):
    • 버퍼가 가득 찼을 경우: 생산자 대기
    • 버퍼가 비었을 경우: 소비자 대기

● 세마포어 사용

  • mutex: 상호배제용 (초기값 1)
  • empty: 빈 공간 수 (초기값 = 버퍼 크기 n)
  • full: 채워진 공간 수 (초기값 0)

● 코드 구조

// 생산자
while (true) {
    produce_item();
    P(empty);
    P(mutex);
    insert_item();
    V(mutex);
    V(full);
}

// 소비자
while (true) {
    P(full);
    P(mutex);
    remove_item();
    V(mutex);
    V(empty);
    consume_item();
}

✅ 판독기-기록기 문제 (Readers-Writers Problem)

  • 판독기(Reader): 데이터를 읽는 프로세스
  • 기록기(Writer): 데이터를 쓰는 프로세스

● 요구 사항

  • 쓰는 동안은 누구도 접근 불가 (Writer 우선)
  • 읽는 동안 쓰기 불가, 읽기는 병렬 허용

● 세마포어 및 변수

  • mutex: rcount 보호용
  • wrt: 공유자원 접근 제어
  • rcount: 현재 읽고 있는 판독기 수

● 코드 구조

// 판독기
P(mutex);
rcount++;
if (rcount == 1) P(wrt);
V(mutex);

read_data();

P(mutex);
rcount--;
if (rcount == 0) V(wrt);
V(mutex);

// 기록기
P(wrt);
write_data();
V(wrt);

✅ 프로세스 간 통신 (IPC: Inter-Process Communication)

● 공유 메모리 방식

  • 변수 등 메모리 공간을 공유
  • 생산자-소비자, 판독기-기록기 문제 예시

● 메시지 전달 방식

  • 시스템 호출: send(), receive()
  • 커널을 통한 통신 수행

✅ 메시지 전달 특성

  • 연결 방식: 1:1, 1:N, N:N
  • 방향성: 단방향, 양방향
  • 용량: 무한, 유한, 0
  • 대기 방식:
    • 비동기 (Non-blocking)
    • 동기 (Blocking)

✅ 통신 링크 유형

  1. 직접 통신 (Direct):
    • 명시적 프로세스 명 사용
    • 단방향/양방향 설정
send(B, m1);
receive(B, m2);
  1. 간접 통신 (Indirect):
    • 우편함(mailbox) 사용
    • 다수 프로세스 공유 가능
    • 단방향 또는 양방향
send(X, m);
receive(X, m);

✅ 요약

  • 생산자-소비자: 버퍼 공유, 상호배제 + 동기화 필요
  • 판독기-기록기: 다수 판독 병행 허용, 쓰기 시 독점 필요
  • IPC: 공유 메모리 vs 메시지 전달
  • 통신 채널 특성: 방향성, 연결성, 동기성 등 고려 필요
profile
Working Abroad ...

0개의 댓글