발표 일자 2024.10.14 MON 10:00 a.m.
CH01 이 책에 관한 대화
앞으로 배울 주제 1) 가상화 2) 병행성 3) 영속성
+ 스터디 추가) 가상화는 물리적 자원을 논리 영역에서 재분배하여 효율적으로 사용하는 개념 (물리적 한계를 넘어설 수 있다)
CH02 운영체제 개요
운영체제 Operating System 은 시스템 콜을 제공하여 가상 머신과 관련된 여러 가지 작업을 진행하고, 시스템의 자원을 효율적으로 관리할 수 있게 한다
가상화 Virtualization 은 물리적인 자원을 이용해서 가상 형태의 자원을 생성하고, 많은 프로그램들이 동시에 실행될 수 있게 한다
2.1 CPU 가상화
하나 또는 소규모의 CPU를 무한 개의 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것
+ API - 프로그램 실행/ 종료 여부를 운영 체제에 전달할 수 있는 인터페이스, 운영체제와 사용자가 상호작용할 수 있는 주된 방법
2.2 메모리 가상화
하나의 프로그램으로 수행하지만 자신만의 가상 주소 공간을 사용한다
2.3 병행성
프로그램이 한 번에 많은 일을 하려 할 때 발생하는, 반드시 해결해야 하는 문제
명령어들이 원자적으로 (한 번에 여러 개 모두) 실행되지 않기 때문에 이상한 일이 발생할 수 있다
병행성은 CPU 가 프로세스들을 동시에 실행하는 것처럼 보이게 하는 기능이고
병렬성은 실제로 동시에 실행하는 기능, 멀티코어가 필요
구현 방식
* 멀티태스킹: 하나의 프로세서에서 여러 작업 번갈아 실행
* 멀티스레딩: 하나의 프로세스 내에서 여러 실행 흐름
* 멀티프로세싱: 여러 프로세서에서 동시 실행
2.4 영속성
파일을 아주 오랜 시간 동안 안전한 상태에 있게 하는 것 (2.5 참고)
파일 시스템은 사용자가 생성한 파일을 시스템의 디스크에 안전하고 효율적인 방식으로 저장할 책임이 있다
2.5 설계 목표
추상화를 통해 시스템을 편리하고 사용하기 쉽게 생각할 수 있음 (이 책에서 중요한 개념)
운영체제의 설계와 구현에 중요한 목표는
1) 성능 - 오버헤드를 최소화하는 것, 시간이나 공간 혹은 둘 다 최소로 사용 목적
2) 응용 프로그램 간의 보호 - 다수 프로그램들이 동시에 실행되기 때문
3) 운영체제와 응용 프로그램 간의 보호 - 응용 프로그램이 운영 체제에 해를 끼치면 안 됨
4) 신뢰성 - 운영 체제가 실패하면 그 위에서 실행되는 모든 응용 프로그램도 실패함
5) 에너지 효율성, 보안, 이동성 등
추상화는 모든 일의 근간이다
2.6 배경 소개
초창기의 운영 체제는 자주 사용되는 함수들을 모아 놓은 라이브러리였지만
시스템 콜이 발명된 이후에 운영 체제가 하드웨어 장치의 제어를 담당하게 된다
미니프레임 이후 미니컴퓨터 시대에 개발자들의 활동이 활발해졌고 멀티프로그래밍 기법이 대중적으로 사용되며
CPU 사용률을 향상함에 따라 메모리 보호, 인터럽트, 병행성 문제가 대두되었다
현대는 개인용 컴퓨터가 생기며 데스크톱 컴퓨터용 운영 체제가 등장하며 많은 기능들이 추가되고 사용하기 좋아졌다
CH03 가상화에 관한 대화
가상화는 하나의 CPU를 각 응용 프로그램에게 여러 개의 CPU 인 것처럼 보이게 하는 일을 한다
그래서 각 응용 프로그램은 자신만 사용하는 CPU가 있다고 생각하지만 실제로는 한 개의 CPU만 있다
CH04 프로세스의 개념
일반적으로 프로세스는 실행 중인 프로그램으로 정의한다
하나의 프로세스를 실행하고, 얼마 후 중단시키고 다른 프로세스를 실행하는 작업을 반복하면서
실제 하나 또는 소수의 CPU로 여러 개의 가상 CPU가 존재하는 듯하게 만드는 것이 CPU 가상화이다
4.1 프로세스의 개념
운영체제에서 제공하는 실행 중인 프로그램의 개념이 프로세스
프로세스의 하드웨어 상태 중 가장 중요한 구성 요소는 메모리이다
프로그램 카운터, 명령어 포인터, 스택 포인터, 프레임 포인터 등 특별한 레지스터도 존재하고
영구 저장 장치에 접근하기도 한다
4.2 프로세스 API
운영체제가 반드시 API로 제공해야 하는 기본 기능
1) 생성 Create - 운영체제는 새로운 프로세스를 생성할 수 있는 방법을 제공해야 한다
2) 제거 Destroy - 운영체제는 프로세스를 강제로 제거할 수 있는 인터페이스를 제공해야 한다
3) 대기 Wait - 여러 종류의 대기 인터페이스가 제공된다
4) 각종 제어 Miscellanceous Control - 예를 들어, 일시정지나 재개하는 기능을 제공한다
5) 상태 Status - 프로세스 상태 정보를 얻어내는 인터페이스도 제공된다
4.3 프로세스 생성 - 좀 더 자세하게
운영체제가 어떻게 프로그램을 준비하고 실행시키고, 실제로 어떻게 프로세스를 생성하는지를 알아본다
1) 프로그램 코드와 정적 데이터를 메모리, 프로세스의 주소 공간에 탑재 Load 한다
프로그램을 실행하면서 코드나 데이터가 필요할 때 필요한 부분만 메모리에 탑재한다
2) 프로세스를 실행시키기 전에 프로그램에 스택 Stack 용도와 힙 Heap 용도의 메모리 영역을 할당한다
스택 영역에는 지역 변수, 함수 인자, 리턴 주소 등 저장하고, 힙 영역에는 동적으로 할당된 데이터 저장한다
3) 입출력과 관계된 초기화 작업을 수행한다
4.4 프로세스 상태
1) 실행 Running
실행 상태에서 프로세스는 프로세서에서 실행 중이다, 프로세스는 명령어를 실행하고 있다
2) 준비 Ready
준비 상태에서 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중이다
3) 대기 Blocked
프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시키는 연산이다
프로세스는 운영체제의 스케줄링 정책에 따라 스케줄이 되면 준비 상태에서 실행 상태로 전이한다
4.5 자료 구조
운영체제도 다양한 정보를 유지하기 위한 자료 구조를 가지고 있다
프로세스 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 프로세스 리스트 Process List 와 같은 자료 구조를 유지한다
레지스터 문맥 Register Context 자료 구조 - 프로세스가 중단되었을 때 해당 프로세스의 레지스터값들을 저장한다
초기 Initial 상태 - 프로세스가 완전히 생성되기 전까지의 상태
최종 Final 상태 - 프로그램은 종료되엇지만 해당 프로세스가 사용하던 각종 자원들이 아직 완전히 반납되지 않은 상태
프로세스 제어 블록 (PCB: Process Control Block)
각 프로세스의 모든 관련 정보를 저장하는 자료 구조입니다.
주요 포함 정보:
프로세스 ID
프로세스 상태 (실행, 준비, 대기 등)
프로그램 카운터 (다음 실행할 명령어 주소)
CPU 레지스터들의 값
CPU 스케줄링 정보 (우선순위 등)
메모리 관리 정보
입출력 상태 정보
계정 정보 (CPU 사용 시간 등)
+ 너무 책에 있는 것을 그대로 하지 않고 내가 해석해서 표현하는 것이 머리에 더욱 남을 것이다
앞으로 (키워드에 따라 다르겠지만) What 보다는 Why 에 집중해서 정리해 보기
'크래프톤정글 > 운영체제' 카테고리의 다른 글
[운영체제] CH16 - CH17 (0) | 2024.10.24 |
---|---|
[OSTEP] 가상화 CH14 - CH15 (1) | 2024.10.19 |
[OSTEP] 가상화 CH10-CH13 (1) | 2024.10.18 |
[OSTEP] 가상화 CH08- CH09 (2) | 2024.10.16 |
[OSTEP] 가상화 CH06 - CH07 (3) | 2024.10.14 |