Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- OPENPATH
- KDT
- 백엔드개발자
- 내일배움카드
- UXUI챌린지
- mysql
- 국비지원
- Be
- 디자인교육
- 환급챌린지
- UXUI기초정복
- baekjoon
- 국비지원교육
- 티스토리챌린지
- 오픈챌린지
- 백엔드 부트캠프
- 오픈패스
- Spring
- 객체지향
- JPA
- 오블완
- 패스트캠퍼스
- 부트캠프
- 디자인챌린지
- 국비지원취업
- Java
- 백준
- 자바
- 디자인강의
- UXUIPrimary
Archives
- Today
- Total
군만두의 IT 개발 일지
[스터디11] 2. 운영체제 본문
목차
CHAPTER 03 운영체제
컴퓨터 시스템의 자원을 효율적으로 관리하고 사용자와 응용 프로그램이 편리하게 컴퓨터를 사용할 수 있도록 돕는 시스템 소프트웨어
1. 운영체제의 역할과 구조
- 운영체제(Operating System): 사용자가 실행하는 응용 프로그램을 대신하여 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품(자원)에 접근하고, 각각의 부품들이 효율적으로 사용되도록 관리하는 소프트웨어
- 커널(Kernel): 운영체제의 핵심 기능을 담당하는 부분
- 자원(Resource): 프로그램 실행에 필요한 요소
주요 관리 기능
- CPU 관리(CPU 스케줄링): 운영체제는 실행 중인 모든 프로그램들이 합리적으로 CPU를 할당받도록 CPU의 할당 순서와 사용 시간을 결정한다.
- 메모리 관리(가상 메모리): 운영체제는 새롭게 실행하는 프로그램을 메모리에 적재하고, 종료된 프로그램을 메모리에서 삭제한다.
- 파일/디렉터리 관리(파일 시스템): 운영체제는 보조기억장치를 효율적으로 관리하기 위해 파일 시스템을 활용한다.
- 파일 시스템: 보조기억장치 내의 정보를 파일 및 폴더 단위로 접근 및 관리할 수 있도록 만드는 운영체제 내부 프로그램
시스템 콜과 이중 모드
- 운영체제는 메모리 내의 커널 영역(Kernel Space)에 적재되어 실행된다. 반면, 사용자 응용 프로그램이 적재되는 공간은 사용자 영역(User Space)이라고 한다.
- 응용 프로그램은 CPU, 메모리와 같은 자원에 직접 접근할 수 없으며, 운영체제의 기능을 제공받기 위해서 시스템 콜(System Call)을 호출해야 한다.
- 시스템 콜: 운영체제 서비스를 제공받기 위한 인터페이스로, 함수 형태로 호출됨
- 시스템 콜이 호출되면 CPU는 사용자 모드에서 커널 모드로 전환하여 운영체제 코드를 실행한다. 이렇게 두 가지 모드로 실행하는 것을 이중 모드(Dual Mode)라고 한다.
2. 프로세스와 스레드
- 프로세스: 메모리에 적재되어 실행되는 프로그램
- 프로세스는 커널 영역에 프로세스 제어 블록(PCB)이 저장되고, 사용자 영역에는 코드, 데이터, 힙, 스택 영역으로 나뉘어 저장된다.
프로세스 메모리 구조
정적 할당 영역
- 코드 영역: 실행 가능한 명령어가 저장되는 읽기 전용(read-only) 공간
- 데이터 영역: 전역 변수나 정적 변수처럼 프로그램 실행 동안 유지될 데이터가 저장되는 공간
동적 할당 영역
- 힙 영역: 개발자가 직접 할당하고 해제할 수 있는 동적 메모리 공간
- 가비지 컬렉션(Garbage Collection): 프로그래밍 언어에서 자체적으로 사용되지 않는 힙 메모리를 해제하는 기능
- 스택 영역: 함수의 매개변수, 지역 변수 등 일시적으로 사용할 데이터가 저장되는 공간
- 스택 트레이스(Stack Trace): 특정 시점에 스택 영역에 저장된 함수 호출 정보
PCB와 문맥 교환
- 프로세스 제어 블록(PCB): 프로세스를 식별하고 관리하기 위한 정보가 담긴 구조체로, 커널 영역에 생성됨
- PCB에는 프로세스 ID(PID), 레지스터 값, 프로세스 상태 등의 정보가 포함된다.
- 문맥 교환(Context Switching): 한 프로세스에서 다른 프로세스로 실행 순서가 넘어갈 때, 기존 프로세스의 정보(문맥)를 PCB에 저장하고 새로운 프로세스의 문맥을 PCB에서 불러오는 과정
프로세스의 상태
프로세스는 실행 과정에서 여러 상태를 거친다.
- 생성 상태(new): 프로세스가 생성되어 메모리에 적재되고 PCB를 할당받은 상태
- 준비 상태(ready): CPU를 할당받기 위해 기다리는 상태
- 실행 상태(running): CPU를 할당받아 실행 중인 상태
- 대기 상태(blocked): 입출력 작업 등 특정 조건이 충족되기를 기다리는 상태
- 종료 상태(terminated): 프로세스가 종료된 상태
멀티프로세스와 멀티스레드
- 멀티프로세스: 여러 개의 프로세스가 동시에 실행되는 것으로, 각 프로세스는 자원을 공유하지 않고 독립적으로 실행됨
- 멀티스레드: 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것으로, 스레드들은 프로세스의 자원(코드, 데이터, 힙 영역 등)을 공유하므로 통신이 쉽지만, 한 스레드의 문제가 프로세스 전체에 영향을 줄 수 있음
프로세스 간 통신(IPC)
프로세스들은 기본적으로 자원을 공유하지 않지만, IPC를 통해 데이터를 주고받을 수 있다.
공유 메모리
- 프로세스들이 공유하는 메모리 영역을 통해 통신하는 방식
- 통신을 주고받는 각 프로세스는 마치 자신의 메모리 영역을 읽고 쓰는 것처럼 통신한다.
- 커널의 개입이 적어 속도가 빠르지만, 동기화 문제가 발생할 수 있다.
메시지 전달
- 커널을 통해 메시지를 주고받는 방식
- 파이프, 시그널, 원격 프로시저 호출(RPC), 네트워크 소켓 등이 사용되며, 공유 메모리 방식보다 안전하지만 속도가 느리다.
- 파이프(Pipe): 단방향 프로세스 간의 통신 도구
- 시그널(Signal): 프로세스에게 특정 이벤트가 발생했음을 알리는 비동기적인 신호
3. 동기화와 교착 상태
- 임계 구역(Critical Section): 여러 프로세스나 스레드가 공유 자원에 동시에 접근할 때 문제가 발생할 수 있는 코드 영역
- 레이스 컨디션(Race Condition): 임계 구역에 동시에 접근하여 문제가 발생하는 상황
동기화 기법
- 동기화(Synchronization): 레이스 컨디션을 방지하기 위해 실행 순서를 제어하고 상호 배제를 보장하는 것
- 뮤텍스 락(Mutex Lock): 임계 구역에 하나의 프로세스/스레드만 접근하도록 보장하는 상호 배제 도구로, acquire(잠금)와 release(해제) 연산으로 제어함
- 세마포(Semaphore): 여러 개의 공유 자원이 있을 때 사용하는 일반화된 동기화 도구로, wait(자원 획득 시도)와 signal(자원 반납) 연산으로 제어함
- 모니터(Monitor): 공유 자원과 관련 연산들을 묶어 한 번에 하나의 프로세스/스레드만 접근하도록 보장하는 동기화 도구로, 조건 변수를 함께 사용하여 실행 순서 제어 가능함
교착 상태(Deadlock)
둘 이상의 프로세스가 서로 상대방이 가진 자원을 기다리며 무한정 대기하는 상태
교착 상태 발생 조건
4가지 조건이 모두 충족되었을 때 발생 가능성이 생긴다.
- 상호 배제: 한 번에 하나의 프로세스만 자원을 사용할 수 있음
- 점유와 대기: 자원을 가진 상태에서 다른 자원을 기다림
- 비선점: 다른 프로세스의 자원을 강제로 빼앗을 수 없음
- 원형 대기: 프로세스와 자원들이 원형으로 서로를 기다림
교착 상태 해결 방법
- 예방: 발생 조건 중 하나를 막는 방법
- 회피: 교착 상태 발생 가능성이 없을 때만 자원을 할당
- 검출 후 회복: 교착 상태를 주기적으로 검출하고, 발생 시 프로세스를 강제 종료하거나 자원을 선점하여 회복
4. CPU 스케줄링
운영체제가 여러 프로세스에 CPU를 배분하는 방법
스케줄링 분류
- 선점형 스케줄링: 실행 중인 프로세스로부터 CPU를 강제로 빼앗아 다른 프로세스에 할당할 수 있음
- 비선점형 스케줄링: 한 프로세스가 CPU 사용을 마칠 때까지 다른 프로세스는 기다려야 함
CPU 스케줄링 알고리즘
- 선입 선처리(FCFS, First Come First Served): 준비 큐에 도착한 순서대로 처리하는 방식
- 최단 작업 우선(SJF, Shortest Job First): CPU 사용 시간이 가장 짧은 프로세스부터 처리하는 방식
- 라운드 로빈(RR, Round Robin): FCFS에 타임 슬라이스 개념을 더한 선점형 방식
- 우선순위 스케줄링: 우선순위가 가장 높은 프로세스부터 처리하는 방식
- 다단계 큐/다단계 피드백 큐 스케줄링: 우선순위별로 여러 개의 큐를 사용하며, 다단계 피드백 큐는 큐 간 이동이 가능하여 아사 현상을 방지함
5. 가상 메모리
- 실제 물리 메모리보다 더 큰 프로그램을 실행할 수 있게 하는 메모리 관리 기법
- CPU와 프로세스는 각자 0번지부터 시작하는 논리 주소를 사용하고, MMU(메모리 관리 장치)에 의해 실제 메모리의 물리 주소로 변환된다.
- 스와핑(Swapping): 메모리가 부족할 때, 현재 사용되지 않는 프로세스를 보조기억장치의 스왑 영역으로 내보내는(스왑 아웃) 기법
페이징을 통한 가상 메모리 관리
- 페이징(Paging): 프로세스의 논리 주소 공간을 일정한 크기의 페이지로, 물리 메모리 공간을 동일한 크기의 프레임으로 나누어 관리하는 기법
- 페이징을 통해 외부 단편화를 해결하고, 프로세스를 불연속적으로 메모리에 배치할 수 있다.
- 페이지 테이블: 어떤 페이지가 어떤 프레임에 있는지 연결해주는 표
- CPU는 페이지 테이블을 참조하여 논리 주소를 물리 주소로 변환한다.
페이지 교체 알고리즘
메모리가 가득 찼을 때, 어떤 페이지를 스왑 아웃할지 결정하는 알고리즘으로, 대표적으로 FIFO, LRU 등이 있다.
- FIFO 페이지 교체 알고리즘(First In First-Out Page Replacement Algorithm): 메모리에 가장 먼저 적재된 페이지부터 스왑 아웃하는 페이지 교체 알고리즘
- 최적 페이지 교체 알고리즘(Optimal Page Replacement Algorithm): 앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘
- LRU 페이지 교체 알고리즘(Least Recently Used Page Replacement Algorithm): 가장 오랫동안 사용하지 않은 페이지를 교체하는 알고리즘
6. 파일 시스템
보조기억장치의 정보를 파일과 디렉터리 형태로 저장하고 관리하는 운영체제 내부 프로그램
- 파일: 데이터와 속성(메타데이터)으로 구성됨. 프로세스는 파일 디스크립터라는 정수 값을 통해 파일을 식별함
- 디렉터리: 파일들을 계층적인 트리 구조로 관리함. 운영체제는 디렉터리를 '디렉터리에 속한 파일들의 정보가 담긴 특별한 파일'로 취급함
파일 할당
- 파일은 블록 단위로 보조기억장치에 할당된다.
- 연결 할당: 각 블록이 다음 블록의 주소를 가리키는 방식
- 색인 할당: 파일의 모든 블록 주소를 색인 블록이라는 특별한 블록에 모아서 관리하는 방식
파티셔닝과 포매팅
- 파티셔닝: 하나의 보조기억장치를 여러 논리적 영역(파티션)으로 나누는 것
- 포매팅: 파티션에 파일 시스템을 설정하여 파일을 저장할 준비를 하는 작업
기술 면접 질문
- 프로세스와 스레드의 차이점을 설명해주세요.
- 컨텍스트 스위칭(문맥 교환)이 무엇인지 설명해주세요.
- 임계영역(Critical Section) 문제를 해결하는 방법들을 설명해주세요.
- 데드락(교착상태)이 발생하는 조건과 해결 방법을 설명해주세요.
- 가상 메모리가 무엇인지 설명해주세요.
- 페이지 교체 알고리즘에 대해서 설명해주세요.
이 글은 『 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접』 책을 읽고 학습한 내용을 정리한 것입니다.
'학습일지 > CS' 카테고리의 다른 글
| [스터디11] 4. 네트워크 (1) | 2025.08.29 |
|---|---|
| [스터디11] 3. 자료구조 (5) | 2025.08.22 |
| 3. 외부 서비스 연동 안정성: 타임아웃, 재시도, 서킷 브레이커 (2) | 2025.08.06 |
| [스터디11] 1. 컴퓨터 구조 (3) | 2025.08.01 |
| 2. 단일 vs 복합 vs 커버링 인덱스, 언제 어떻게 써야 할까? (3) | 2025.07.27 |
Comments
