chapter 09 운영체제 시작하기
모든 프로그램은 하드웨어를 필요로 함
시스템 자원
, 자원
: 프로그램 실행에 마땅히 필요한 요소들 가리킴
😋운영체제
: 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
운영체제 또한 프로그램과 마찬가지로 메모리에 적재되어야 한다.
메모리 내 커널 영역
에 따로 적재되어 실행된다.
사용자 영역
: 응용 프로그램 적재되는 영역
운영체제는 커널 영역에 적재되어, 사용자 영역에 적재된 프로그램들에 자원을 할당, 올바르게 실행되도록 돕는다.
- 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당,
- 응용 프로그램이 올바르게 실행되도록 관리하는 역할
- 커널
- 이중 모드와 시스템 호출
- 운영체제가 응용 프로그램에 제공하는 서비스 종류
- 운영체제: 사용자가 실행하는 응용 프로그램을 올바르게 실행되도록 돕고 필요한 자원을 할당해주는 프로그램
사용자 인터페이스
운영체제는 응용 프로그램의 자원 접근을 대행하는 일종의 문지기 역할
이중 모드(dual mode)
: CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 / 커널 모드로 구분하는 방식
시스템 호출(시스템 콜)
: 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면
시스템 호출
을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받는다.
소프트웨어 인터럽트: 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 한다.
- 시스템 호출을 발생시키는 명령어 실행
- CPU는 지금까지의 작업 백업
- 커널 영역 내 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴) 실행
- 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행 계속
프로세스 관리
자원 접근 및 할당
CPU(11장)
메모리(14장)
입출력장치
입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤, 커널 영역에 있는 인터럽트 서비스 루틴을 실행
인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행한다.
파일 시스템 관리(15장)
- 커널: 운영 체제의 핵심 서비스 제공하는 부분
- 사용자 프로세스가 커널의 서비스를 제공받기 위해서는, 사용자 모드에서 커널 영역으로 전환, 이는 시스템 호출을 통해 이루어진다.
- 커널의 대표적인 서비스
- 프로세스 관리
- 자원 접근 및 할당
- 파일 시스템 관리
- 프로세스
- 프로세스 제어 블록
- 문맥 교환
- 프로세스 사용자 영역
프로그램
프로세스
가 된다.[윈도우]-[작업 관리자]-[프로세스]
유닉스 운영체제: ps
포어그라운드 프로세스: 사용자가 보는 앞에서 실행되는 프로세스
백 그라운드 프로세스: 사용자가 보지 못하는 뒤에서 실행
유닉스 운영체제에서의
데몬 : 사용자와 상호작용하지 않고 정해진 일만 수행하는 백그라운드 프로세스윈도우 운영체제에서의
서비스: 위 내용과 동일 프로세스 제어 블록
(PCB)을 이용한다.
- PCB에 담기는 정보들
- 프로세스 ID(PID): 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
- 레지스터 값
- 프로세스 상태(11장): 현재 프로세스가 어떤 상태인지도 기록
- CPU 스케줄링 정보: 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지에 대한 정보
- 메모리 관리 정보: 어느 주소에 저장되어있는지에 대한 정보가 있어야 한다.
- 베이스 레지스터
- 한계 레지스터
- 페이지 테이블 정보도 PCB에 담김(14장)
- 사용한 파일과 입출력장치 목록
문맥(context): 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
문맥교환(context switching) : 기존 프로세스의 문맥을 PCB에 백업, 새로운 프로세스를 실행하는 것
커널 영역
사용자 영역
코드 영역
: 텍스트 영역
데이터 영역
: 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
👨정적 할당 영역: 코드 영역, 데이터 영역
👩🦰 동적 할당 영역: 힙, 스택 영역
힙 영역
메모리 누수
문제 발생스택 영역
- 힙 영역: 메모리의 낮은 주소에서 높은 주소로 할당
- 스택 영역: 높은 주소에서 낮은 주소로 할당
생성 상태(new): 막 메모리에 적재되어 PCB를 할당받은 상태
준비 상태(ready): 차례가 되면 CPU 할당받아 실행 상태가 됨
디스패치
라고 한다.실행상태(running)
CPU를 할당받아 실행 중인 상태
할당된 일정 시간 동안만 PCU 사용
모두 사용하게 되면(타이머 인터럽트 발생하면) 다시 준비 상태가 되고, 실행 도중 입출력 장치를 이용하여 입출력 장치의 작업 끝날 때까지 기다려야 한다면 대기 상태가 된다.
대기 상태(blocked): 프로세스는 실행 도중 입출력 장치를 사용하는 경우가 있다.
입출력 작업
종료 상태(terminated): 프로세스 종료
프로세스 상태 다이어그램
프로세스는 생성, 준비, 실행, 대기, 종료 상태를 거치며 실행된다.
- 최초의 프로세스
- 유닉스 운영체제:
init
- 리눅스 운영체제:
systemd
- mac OS :
launchd
- 최초의 PID는 항상 1번.
부모 프로세스가 자식 프로세스를 어떻게 만들어 내고, 자식 프로세스는 어떻게 자신만의 코드를 실행
부모 프로세스르 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기
부모 프로세스는 fork
통해 자신의 복사본을 자식 프로세스로 생성
만들어진 복사본(자식 프로세스)은 exec
를 통해 자신의 메모리 공간을 다른 프로그램으로 교체
fork와 exec 는 시스템 호출
부모 프로세스로부터 자식 프로세스가 복사(fork)
자식 프로세스는 새로운 프로그램으로 옷을 갈아입고
1) 생성 2) 준비 3) 실행 4) 종료 5) 대기
로그인 프로세스
vim 프로세스
bash 프로세스
단일 스레드 프로세스
하나의 실행 흐름을 가지고 한 번에 하나의 부분만 실행되는 프로세스를 가정
스레드
멀티 스레드 프로세스
프로세스를 구성하는 실행 단위
각자 프로그램 카운터 값을 비롯한 레지스터 값, 스택을 가지고 있기에 스레드마다 각기 다른 코드를 실행할 수 있다.
- 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다는 것이다.
컴퓨터는 실행 과정에서 여러 프로세스가 동시에 실행, 프로세스를 이루는 스레드는 여러 개 있을 수 있다.
멀티프로세스
멀티스레드
프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내 자원을 공유한다는 점이다.
- 동일한 프로세스 두 개 동시에 실행하면..
- PID, 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스 두 개가 통째로 메모리에 적재된다.
같은 프로세스 내 모든 스레드는 동일한 주소 공간의 코드, 데이터, 힙 영역을 공유하고, 열린 파일과 같은 프로세스 자원을 공유한다.
315p
1. 2
- 프로세스 내 스레드들은 각기 다른 코드/데이터/힙 영역을 가지고 있지 않습니다.
- 공유하지 않지만, 공유합니다.