컴퓨터/정보처리기사

운영체제 이론

수제녹차 2025. 4. 22. 22:34
728x90
반응형

* IPC(Inter-Process Communication, 프로세스 간 통신)

모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합

복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현 가능

대표적인 메소드에는 공유 메모리, 소켓, 세마포어, 파이프와 네임드 파이프, 메시지 큐잉이 있다

 

운영체제에서 실행 중인 프로세스들이 데이터를 주고받을 수 있도록 하는 메커니즘

 

IPC는 “운영체제” 과목에서 주로 다루는 개념입니다. 실기 시험에서는 프로세스 관리 및 동기화, 공유 자원 접근 방식과 관련하여 출제될 가능성이 있습니다.

 

IPC 주요 개념

1. 공유 메모리(Shared Memory)

프로세스들이 같은 메모리 공간을 공유하여 데이터를 주고받는 방식

속도가 빠르지만 동기화 문제가 발생할 수 있음 (ex. 세마포어 사용)

2. 메시지 큐(Message Queue)

운영체제가 제공하는 큐를 이용하여 프로세스 간 데이터를 주고받는 방식

비동기식 통신이 가능

3. 소켓(Socket)

네트워크를 통해 다른 컴퓨터에서 실행 중인 프로세스와 통신

인터넷 기반 애플리케이션에서 주로 사용

4. 파이프(Pipe)

단방향 데이터 흐름을 제공하는 통신 방식

부모-자식 프로세스 간 통신에 사용됨 (익명 파이프, 명명된 파이프)

5. 세마포어(Semaphore) & 뮤텍스(Mutex)

공유 자원의 접근을 제어하여 동기화 문제 해결

세마포어는 여러 프로세스가 접근 가능, 뮤텍스는 단일 프로세스만 접근 가능

 

  • 메모리 관리

배치 전략: 하나의 프로세스를 통으로 넣음

페이징 기법: 하나의 프로세스를 페이지 단위로 쪼개서 가상 메모리에 넣는다

 

CPU 스케쥴링: 프로세스 연산 할당 방법

 

리눅스: 자주 사용되는 명령어

 

 

  • 운영체제의 목적

(1) 처리 능력(Throughput) 향상

(2) 반환 시간(Turn Around Time) 단축

(3) 사용 가능도(Availability) 향상

(4) 신뢰도(Reliability) 향상

 

 

  • 메모리 관리 (배치 전략)

2칸짜리 메모리를 차지하는 프로세스가 왔다. 어떻게 넣을 것인가?

 

(1) 최초 적합: 가장 앞 부분에서부터 탐색하다가 처음 만난 곳에 넣는다

First-fit

(2) 최적 적합(Best-fit): 프 포로세스를 할당하면서 최대한 낭비 없이 넣는다. (남는 공간이 가장 적은 공간에 할당)

(3) 최악 적합(worst-fit): 가장 큰 공간에 할당

 

 

  • 가상 메모리 관리(페이징 기법)

 

가상기억장치: 보조기억장치 일부를 주기억장치처럼 사용하는 것

프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고,

프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리한다

 

가상기억 장치의 일반적인 구현 방법

(1) 페이징: 프로그램을 고정된 크기의 일정한 블록으로 나눔

(2) 세그먼테이션: 가변적인 크기의 블록으로 나눈다

 

 

프로그램: 변수,함수 등 저장할 메모리 필요한데 너무 클 수 있으니 잘라서!

 

실행할 프로세스를 page라는 단위로 잘라서, 똑같이 자른 물리 주소 공간(frame)에 할당하는 방법

 

프레임: 물리적 메모리 주소를 페이지 크기와 맞게 잘라놓은 공간의 단위

 

ram: 주기억장치

 

페이지라는 단위는 계속 교체해서 메모리에 올리거나, 디스크에 되돌리거나를 반복한다.

 

OPT, FIFO, LRU, LFU, MFU, NUR와 같은 방법론이 있다.

 

메모리에 올라가 있는 잘린 프로세스의 단위를 교체한다고 생각하면 된다.

 

NUR(Not Used Recently)

최근에 사용하지 않은 페이지를 교체하는 기법

 

 

  • 프로세스

 

현재 실행 중인 프로그램

운영체제가 자원을 할당하고 관리하는 기본 단위

운영체제는 각 프로세스에 CPU 연산 시간, 메모리, 파일, 입출력 장치에 대한 자원을 할당해서 작업을 수행한다.

 

 

  • 페이지 폴트(page fault)

프로그램이 참조하려는 페이지가 현재 메모리에 없다는 것을 칭하는 용어

 

프레임: 물리적 메모리 주소를 페이지 크기와 맞게 잘라놓은 공간의 단위

 

OPT: 미래를 예측해서~ 최적으로, optimal

 

hit: 참조하려는 페이지가 현재 메모리에 있을 때

 

 

  • FIFO(First-in First-out)

 

자리 없으면 고참을 제거하고 넣는다

 

 

  • LRU(Least Recently Used)

 

사용한지 가장 오래된 페이지 참조 문자열을 교체한다

 

 

  • LFU(Least Frequently Used)

 

참조 횟수가 가장 적은 페이지를 교체한다

 

참조 횟수가 동일하면 더 오래된 것과 교체한다

 

 

  • MFU(Most FREQUENTLY USED)

 

참조횟수가 가장 많은 페이지를 교체한다.

 

앞에서 많이 썼으니까 뒤에 적게 쓸거야~

 

 

  • NUR(Not Used Recently)

 

최근에 사용되지 않은 페이지 교체

LRU에서 나타나는 시간적인 오버헤드를 줄일 수 있다

최근의 사용 여부를 확인하기 위해 각 페이지마다 두 개의 비트, 즉 참조 비트와 변형 비트가 사용된다.

참조 비트: 호출되었는지 여부

변형 비트: 페이지 내용이 변경되었는지 여부

 

 

  • 논리 메모리 - 페이지 테이블 - 물리 메모리

 

 

  • 약술형 대비

 

(1) locality(지역성)

프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다

 

시간 구역성, 공간 구역성이 있음

 

(2) 워킹셋

프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합

 

(3) 스레싱(Thrashing)

프로세스 처리 시간보다 페이지 교체 시간이 더 많아지는 현상

 

다중 프로그래밍의 정도가 높아짐에 따라 CPU 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소

 

(4) PCB(Process Control Block, 프로세스 제어 블록)

 

운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳

 

 

(5) 프로세스 상태 전이

프로세스 상태의 종류: 생성, 준비, 실행, 대기, 완료, 끝

프로세스 상태 전이(process state transition)

제출: 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태입니다.
접수: 제출된 작업이 spool 공간인 디스크의 할당 위치에 저장된 상태입니다.
준비: 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태입니다. 프로세스는 준비상태 큐(스케줄링 큐)에서 실행을 준비하고 있으며 접수상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행됩니다.
실행: 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태이며 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료 되면 프로세스는 준비상태로 전환됩니다. 실행중인 프로세스에 입출력 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이되며, 실행상태로의 전이는 CPU 스케줄러에 의해 수행됩니다.
대기: 프로세스에 입출력 처리가 필요하면 현재 실행중인 프로세스가 중단되고, 입출력 처리가 완료될때까지 대기하고 있는 상태입니다.
종료: 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태입니다.

<관련 용어>
Dispatch: 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정

 

CPU 스케줄러에 의해 실행 상태로 전이


Wake Up: 입출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정


스풀링(SPOOLing, Simultaneous Peripheral Operation On-line)

입출력(I/O) 작업과 CPU 작업을 병렬로 수행하기 위해 사용되는 기법

CPU가 입출력 장치의 속도보다 훨씬 빠르기 때문에, CPU가 입출력 작업을 기다리지 않고 다른 작업을 수행할 수 있도록 도와줌

디스크를 입출력 장치와 CPU 간의 버퍼(Buffer) 역할로 사용

대표적인 예: 프린터 스풀링

여러 사용자의 출력 요청을 디스크에 저장한 후, 프린터가 처리할 수 있는 속도로 하나씩 출력

 

입출력 장치의 공유 및 상대적으로 느린 입출력 장치의 처리속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기 위해 입출력할 데이터를 직접 입출력장치에 보내지 않고 나중에 한꺼번에 입출력하기 위해 디스크에 저장하는 과정

 

 

 

(6) 스레드(Thread)

 

프로세스보다는 작은 단위로 독립적으로 수행되는 제어의 흐름. 한 개의 프로세스는 여러 개의 스레드를 가지고 있을 수 있다.

 

 

교착 상태: 여러 개의 프로세스가 특정 자원 할당을 계속 대기하면서 서로 소비 못하는 상황

  • 교착 상태가 되기 위한 조건: 상호배제, 점유와 대기, 비선점, 환형 대기

상호 배제: 한 번에 하나의 프로세스만 특정 자원을 사용할 수 있다.

점유와 대기: 어떤 프로세스가 이미 할당된 자원을 점유한 상태에서 추가적인 자원을 기다리고 있어야 한다.

비선점: 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없어야 한다.

환형 대기: 여러 프로세스가 원형으로 자원을 대기하는 형태

  • 교착상태 해결방법: 예방, 회피, 발견, 복구

 

교착 상태(Deadlock)를 해결하는 방법은 크게 네 가지로 나눌 수 있다.

 

1. 예방(Prevention)

  • 교착 상태가 발생하기 위한 네 가지 조건(상호배제, 점유와 대기, 비선점, 환형 대기) 중 하나 이상을 제거하여 교착 상태를 원천적으로 막는 방법이다.
  • 방법:

 

2. 회피(Avoidance)

  • 시스템이 자원 할당을 할 때 교착 상태가 발생할 가능성이 있는지 미리 검사하고, 위험하면 할당하지 않는 방법이다.
  • 대표적인 알고리즘: 은행가 알고리즘(Banker's Algorithm)

 

3. 발견(Detection)

  • 교착 상태가 발생했는지 감지하고, 감지되면 해결하는 방법.
  • 방법:

 

4. 복구(Recovery)

  • 교착 상태가 발생한 후 이를 해결하는 방법.
  • 방법:

 

💡 정리:

  • 예방: 교착 상태가 아예 발생하지 않도록 설계
  • 회피: 교착 상태 가능성이 있는 경우 자원 할당을 피함
  • 발견: 교착 상태 발생 여부를 감지
  • 복구: 교착 상태가 발생하면 해결

각 방법은 장단점이 있어서 상황에 맞게 선택해야 한다.

 

 

 

 

  • 뮤텍스(Mutual Exclusion): 하나의 프로세스가 공유 자원에 접근하는 동안, 다른 프로세스가 해당 자원에 접근 못하게 막는 도구

한 번에 하나의 프로세스(또는 스레드)만 자원을 사용할 수 있도록 보장하는 락(Lock)

자원을 점유한 프로세스가 반드시 반납(Unlock) 해야 함

바이너리 값(0 또는 1) → **이진 세마포어(Binary Semaphore)**와 비슷하지만 개념적으로 다름

 

상호 배제 보장, 1개의 자원 보호

 

  • 세마포어(Semaphore): 운영체제에서 여러 프로세스가 공유 자원을 사용할 때 문제를 해결하는 동기화 도구(정수값으로 보통 관리)

 

  • 여러 개의 프로세스(또는 스레드)가 접근할 수 있도록 허용하는 동기화 도구
  • 뮤텍스와 달리 0~N개의 자원 접근 가능
  • 두 가지 유형이 있음:

특징:

  • 초기값이 N인 경우, 최대 N개까지 동시 접근 가능
  • 뮤텍스와 달리 자원을 점유한 프로세스가 직접 반납할 필요 없음
  • P() (wait, down) 연산으로 자원 요청, V() (signal, up) 연산으로 자원 반환

 

N개의 자원 관리

 

  • CPU 스케줄링 알고리즘

 

스케줄링?

프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업

 

 

CPU의 연산을 기다리는 여러 개의 프로세스가 있다. 숫자는 각 프로세스에 필요한 연산 시간이다.

 

선점형과 비선점형

선점형: 프로세스가 CPU를 사용 중인데, 더 높은 우선순위의 프로세스가 CPU 연산을 빼앗아가는 것

비선점형: 한 프로세스가 CPU를 차지하면, 그 프로세스가 끝날 때까지는 다른 프로세스가 점유 못함

 

  • CPU 스케줄링 알고리즘(선점형)

 

Round Robin, SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐 등

 

RR(Round Robin, 라운드 로빈): 모든 프로세스에게 공평하게 시간을 할당하고, 할당된 시간 실행 후 가장 뒤로 세우는 것

특정 타임 슬라이스를 정해서 골고루 나눠준다

단점: context switching

 

SRT, SRTF, SRF(Shortest Remaining Time): 남은 시간이 가장 적은 프로세스를 우선 순위로 연산

실행되고 있는 도중, 남은 시간이 더 짧은 프로세스가 들어오면 그 프로세스 먼저 해결한다.

 

(2024.2회) 준비상태 큐에 각 프로세스의 도착 시간과 실행 시간이 다음과 같을 때 SRT로 스케쥴링할 때 평균 대기 시간을 쓰시오

프로세스 도착 시간 실행 시간
A 0 8
B 1 4
C 2 9
D 3 5

 

정답: 6.5

 

반환 시간 => 대기 시간과 실행 시간 합함

 

  • CPU 스케줄링 알고리즘(비선점형)

 

FCFS, SJF, 우선순위, HRN, 기한부

 

FCFS(First come, First serve)

SJF(Shortest Job First): 실행시간이 가장 짧은 프로세스를 먼저하는 형태

우선순위: 프로세스가 가지고 있는 우선순위 별로 먼저 소비

 

HRN (Highest Response-ratio Next)

대기 시간과 서비스 시간을 이용하는 기법

우선순위 계산식 = (대기 시간 + 서비스 시간) / 서비스 시간

 

기한부

 

  • 리눅스(유닉스) 운영체제 내의 명령어

ls: 디렉토리 내용을 나열함

cd: 디렉토리 변경 명렁어

pwd: 현재 작업 중인 디렉토리 경로 출력

cp: 파일이나 디렉토리 복사

mv: 파일이나 디렉토리를 이동하거나 이름을 변경한다.

rm: 파일이나 디렉토리를 삭제한다. 

mkdir: 새 디렉토리 만들기

rmdir: 빈 디렉토리 삭제

touch: 빈 파일을 생성하거나 기존 파일의 타임스태프 변경

chmod: 파일이나 디렉토리의 권한을 변경

chmod 755 script.sh  ⭐️ (기출)

 

abc.txt 파일에 대해 다른 사용자의 읽기, 쓰기 권한을 제거

chmod o-rw abc.txt

 

chmod u+x myscript.sh  # 소유자에게 실행 권한 추가

chmod g-w myfile.txt   # 그룹의 쓰기 권한 제거

chmod o=rx myfile.txt  # 기타 사용자는 읽기+실행만 가능하게 설정

chmod a+r myfile.txt   # 모든 사용자에게 읽기 권한 추가

 

 

chmod(Change Mode) 사용법

chmod 명령어는 파일이나 디렉토리의 권한을 변경할 때 사용한다.

 

1. 파일 권한 개념

리눅스에서 파일 권한은 **소유자(owner), 그룹(group), 기타 사용자(others)**로 나뉘고, 각 사용자에 대해 세 가지 권한이 설정된다.

기호 권한 설명
r 읽기(Read) 파일 읽기 (4)
w 쓰기(Write) 파일 수정 또는 삭제 (2)
x 실행(Execute) 파일 실행 (1)

ls -l 명령을 실행하면 다음과 같이 파일의 권한을 확인할 수 있다.

$ ls -l myfile.txt

-rw-r--r--  1 user group  1234 Feb 26 10:00 myfile.txt

  • -rw-r--r--

 

2. chmod 사용법

(1) 숫자(8진수)로 설정하는 방법

각 권한을 숫자로 표현하여 설정한다.

권한 숫자
r-- 4
-w- 2
--x 1
rw- 6 (4+2)
r-x 5 (4+1)
rwx 7 (4+2+1)

🔹 예제

chmod 755 myfile.txt

  • 7(111) → 소유자: 읽기(r) + 쓰기(w) + 실행(x)
  • 5(101) → 그룹: 읽기(r) + 실행(x)
  • 5(101) → 기타 사용자: 읽기(r) + 실행(x)

chmod 644 myfile.txt

  • 6(110) → 소유자: 읽기(r) + 쓰기(w)
  • 4(100) → 그룹: 읽기(r)
  • 4(100) → 기타 사용자: 읽기(r)

 

(2) 기호(알파벳)로 설정하는 방법

권한을 u(소유자), g(그룹), o(기타 사용자), a(모두)로 지정하고 +, -, = 기호를 사용하여 변경한다.

기호 의미
+ 권한 추가
- 권한 제거
= 특정 권한으로 설정

 

 

3. 디렉토리 권한 변경

디렉토리에 chmod를 사용할 때는 -R(재귀) 옵션을 사용하면 하위 파일/폴더까지 적용 가능하다.

chmod -R 755 myfolder/  # myfolder와 내부 모든 파일에 적용

 

4. 실행 권한 추가 (스크립트 실행 가능하게)

chmod +x myscript.sh  # 실행 권한 추가

./myscript.sh         # 실행

 

5. chmod 실전 예제

chmod 700 secret.txt  # 소유자만 읽기, 쓰기, 실행 가능

chmod 644 document.txt  # 모든 사용자 읽기 가능, 소유자만 쓰기 가능

chmod 777 public.sh  # 모든 사용자 읽기, 쓰기, 실행 가능 (위험!)

 

💡 정리

  • 숫자(chmod 755 파일명), 기호(chmod u+x 파일명) 두 가지 방식 사용 가능
  • -R 옵션으로 디렉토리 포함 변경 가능
  • 실행 파일(.sh)은 chmod +x 파일명으로 실행 권한 부여
  • 보안상 777은 신중하게 사용! 🚨

 

 

chown: 파일이나 디렉토리의 소유자를 변경 ex. chown new_user example.txt

find: 파일이나 디렉토리를 검색 find /home -name “*.txt”

grep: 특정 문자열을 파일에서 검색 ex. grep “cooking” recipe.txt

cat: 파일의 내용을 출력 ex. cat file.txt

echo: 문자열을 출력하거나 파일에 저장 ex. echo “Hello, World!”

 

 

  • 커널

 

UNIX의 가장 핵심적인 부분

컴퓨터가 부팅될 때 주기억장치에 적재된 후 상주하면서 실행된다

프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일 관리, 입출력 관리, 프로세스간 통신, 데이터 전송 및 변환 등 여러 가지 기능을 수행한다

 

  • 단편화

 

구분 내부 단편화 외부 단편화
발생 원인 고정 크기 블록 가변 크기 블록,
낭비 위치 할당된 블록 내부 여러 번의 할당/해제를 반복하면서 작은 공간이 흩어져 메모리를 할당할 없는 상태
예방 방법 가변 분할, 세밀한 블록 조정 압축(compaction), 페이징/세그먼테이션 사용

 

외부 단편화 예시

 

💡 상황: 가변 크기 블록으로 메모리를 할당하는 시스템

  • 현재 시스템에는 이렇게 빈 공간이 있음:

less

복사편집

[빈 공간] 150KB | 사용중 | [빈 공간] 100KB | 사용중 | [빈 공간] 200KB

  • 사용자는 300KB짜리 프로그램을 실행하려고 해

📦 문제 발생

  • 전체 빈 공간 합치면: 150 + 100 + 200 = 450KB
  • 하지만 연속된 300KB 공간이 없음 → 그래서 프로그램을 실행할 수 없어!
  • 이렇게 쪼개진 공간들 사이에 낭비 외부 단편화
반응형