-
Notifications
You must be signed in to change notification settings - Fork 0
학습 기록 | w5 지현
#운영체제 #문제 해결
자원 / 시스템 자원
- 프로그램 실행에 필요한 요소
- 컴퓨터의 네가지 핵심 부품 포함
- 모든 프로그램은 실행을 위해 자원을 필요로 한다
운영체제
- 실행할 프로그램에 필요한 자원을 할당
- 프로그램이 올바르게 실행되도록 돕는
- 특별한
프로그램
- 메모리에 적재되어 실행 → 커널 영역
- 메모리, CPU, 입출력장치 관리
커널 영역 kenel space
- 운영체제
사용자 영역 user space
- 사용자가 이용하는 응용 프로그램
- 운영체제가 관리
💡 운영체제는 사용자를 위한 프로그램이 아니다! 프로그램을 위한 프로그램이다.
#커널 #이중 모드 #시스템 호출 #운영체제 서비스
- 운영체제의 핵심 기능 담당
사용자 인터페이스 UI; User Interface
- 운영체제 속하지만 커널에 속하지 않는 기능
- 사용자와 컴퓨터간의 통로, 운영체제의 핵심 기능은 아님
ex ) 그래픽 유저 인터페이스 GUI; Graphical User Interface 커맨드 라인 인터페이스 CLI; Command Line Interface
💡 운영체제는 응용프로그램 대신 자원에 접근 → 이중모드로서 구현
dual mode
- CPU가 명령어를 실행하는 모드를 크게 사용자모드와 커널 모드로 구분하는 방식
사용자 모드 user mode
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
커널 모드 kernel mode
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능
시스템 호출(시스템 콜, system call)
- 커널 모드로 변환하여 실행하기 위해 호출
- 소프트웨어 인터럽트
ex) fork(), execve(), exit(), waitpid(), open(), close(), read(), write(), stat() …
-
프로세스 관리
프로세스 == 실행 중인 프로그램
- 동시다발적으로 생성/실행/삭제 되는 다양한 프로세스를 관리
💡 더 알아보기 : 프로세스와 스레드, 프로세스 동기화, 교착상태 해결
-
자원 접근 및 할당
CPU
- CPU 스케줄링 : 어떤 프로세스를 먼저, 얼마나 오래 실행할까?
메모리
- 프로세스의 적재 위치 결정
- 페이징, 스와핑
입출력장치
- 인터럽트 서비스 루틴(커널 영역)
-
파일 시스템 관리
- 관련된 정보를 파일이라는 단위로 저장 장치에 보관
- 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관
💡 시스템 콜 자세히보기 tool
리눅스 - strace ./a.out
맥OS - sudo dtruss ./a.out
#프로세스 #프로세스 제어 블록 #문맥 교환 #프로세스 사용자 영역
- 실행중인 프로그램
- 포그라운드 프로세스 (foreground process)
- 사용자가 볼 수 있는 공간에서 실행되는 프로세스
- 백그라운드 프로세스 (background process)
-
사용자가 볼 수 없는 공간에서 실행되는 프로세스
-
사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스
ex) 데몬 (demon), 서비스 (service)
-
-
프로세스들은 돌아가며 한정된 시간 만큼만 CPU 이용
- 자신의 차례에 정해진 시간만큼 CPU 이용
- 타이머 인터럽트가 발생하면 차례 양보
-
빠르게 번갈아 수행되는 프로세스들을 관리하는 자료구조를 프로세스 제어 블록(PCB; Process Control Block)
- 프로세스 관련 정보를 저장하는 자료구조, 프로세스 식별
- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기
새로운 프로세스 생성 == 운영체제가 PCB를 생성
프로세스 종료 == 운영체제가 해당 PCB를 폐기
PCB에 담기는 대표적인 정보
- 프로세스 ID (
PID; Process ID)- 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- 레지스터 값
- 프로세스는 실행 차례가 오면 사용중인 레지스터들의 중간값들을 모두 복원 → 실행 재개
- PCB안에는 해당 프로세스가 실행하며 사용했던 레지스터 값을 담음
- 프로그램 카운터, 스택 포인터 ..
- 프로세스 상태
- 입출력 장치 사용을 위해 기다리는 상태, CPU 사용을 기다리는 상태, …
- CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을 지
- 메모리 관리 정보
- 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
- 페이지 테이블 정보
- 사용한 파일과 입출력장치 목록
- 할당된 입출력장치, 사용 중인(열린) 파일 정보
기존의 실행 중인 프로세스 문맥을 백업하고 새로운 프로세스 실행을 위해 문맥을 복구하는 과정
- 한 프로세스(A)에서 다른 프로세스(B)로 실행 순서가 넘어간다.
- 기존에 실행중인 프로세스 A는 지금까지의 중간 정보를 백업
- 문맥 (context) == 중간 정보
- 다음 차례에 실행 재개를 위한 정보
- 프로그램 카운터 등 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력 장치 등
- 뒤이어 실행할 프로세스 B의 문맥을 복구
정적 할당 영역
- 코드 영역, 데이터 영역
동적 할당 영역
- 힙 영역(낮은 주소 → 높은 주소 할당)
- 스택 영역(높은 주소 → 낮은 주소 할당)
-
코드 영역 (=텍스트 영역)
code segment
- 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장 (데이터 X)
- 쓰기 금지 (read-only)
-
데이터 영역
text segment
- 프로그램이 실행되는 동안 유지할 데이터
ex) 전역 변수
-
힙 영역
heap segment
- 프로그램을 만드는 사용자가 직접 할당할 수 있는 저장공간
- 해당 공간을 반환해야 함 → 메모리 누수 (memory leak) 방지
-
스택 영역
- 데이터가 일시적으로 저장되는 공간
ex) 매개 변수, 지역 변수
#프로세스 상태 #부모 프로세스 #자식 프로세스 #프로세스 계층 구조
- 생성 상태 (new)
- 메모리에 막 적재되어 PCB를 할당 받은 상태
- 준비가 완료되었다면 준비 상태로 CPU 할당 기다림
- 준비 상태 (ready)
- 당장 CPU를 할당 받아 실행할 수 있지만 차례를 기다리는 상태
- 차례가 오면 실행 상태로 (=디스패치;dispatch)
- 실행 상태 (running)
- CPU를 할당 받아 실행 중인 상태
- 할당된 시간 모두 사용 시(타이머 인터럽트 발생) 준비 상태로
- 실행 도중 입출력장치를 사용하면 끝날 때까지 대기 상태로(입출력 인터럽트를 받을때까지)
- 대기 상태 (blocked)
- 프로세스가 실행 도중 입출력장치를 사용하는 경우
- 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로
- 입출력 작업이 끝나면 (입출력 완료 인터럽트를 받으면) 준비 상태로
- 종료 상태 (terminated)
- 프로세스가 종료된 상태
- PCB, 프로세스의 메모리 영역 정리
프로세스 실행 도중 (시스템 호출을 통해) 다른 프로세스를 생성 → 도표로 그리면 트리 구조
- 부모 프로세스 (parent process)
- 자식 프로세스 (child process)
- 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 함
부모/자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐
fork
- 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성
- 부모 프로세스의 자원 상속(PID와 저장된 메모리 위치는 다름)
exec
- 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체
#스레드 #멀티프로세스 #멀티스레드
프로세스를 구성하는 실행 흐름의 단위
하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.
단일 스레드 프로세스
- 실행 흐름이 하나인 프로세스
멀티 스레드 프로세스
- 프로세스를 이루는 여러 명령어 동시 실행 가능
스레드의 구성 요소
- 스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등
- 실행에 필요한 최소한의 정보
💡 프로세스를 이루는 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 프로세스 자원을 공유하며 실행됨
동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행
vs
하나의 프로세스를 여러 스레드로 실행
| 멀티 프로세스 | 멀티 스레드 |
|---|---|
| 동일한 자원 여러개 | 하나의 자원 공유 |
| 메모리에 동일한 내용 중복 → 낭비 | 효율적인 메모리 사용 |
| 독립적으로 실행 | 협력과 통신에 유리 |
| 다른 프로세스에 문제가 생겨도 지장이 없음 | 다른 스레드에 문제가 생기면 전체에 지장 |
프로세스 간 통신
IPC; Inter-Process Communication
- 파일을 통한 프로세스간 통신
- 공유 메모리(shared memory)
-
옳지 않은 것을 고르시오
- GUI와 CLI는 사용자를 위한 필수 서비스로 커널에 포함되어 있다.
- 시스템 호출을 통해 사용자 모드를 커널 모드로 변경할 수 있다.
- 백그라운드 프로세스는 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스로 데몬 (demon), 서비스 (service)을 포함한다.
- 프로세스들은 문맥 교환을 통해 번갈아 가며 수행된다.
-
프로세스 상태를 보여주는 프로세스 상태 다이어그램입니다. 빈칸에 올바른 단어를 적으시오. (한글, 영어 모두 가능)

-
멀티 프로세스를 실행하는 것과 멀티 스레드로 실행하는 것의 장점과 단점에 대해 설명하시오.
정답
1. 1) UI(GUI, CLI) 는 커널에 포함되지 않는다.
2. 왼 : ready(준비)
오 : running(실행)
3. 멀티 프로세스 : 메모리에 동일한 내용이 중복되어 낭비가 될 수 있지만 독립적으로 실행되어 다른 프로세스에 문제가 생겨도 영향이 없다.
멀티 스레드 : 하나의 자원을 공유하여 효율적인 메모리 사용과 통신에 유리하지만 다른 스레드에 문제가 생기면 전체에 영향이 간다.