가상화, 프로세스의 개념
프로세스 = cpu 가상화
📌 배운 것
프로세스 란?
실행 중인 프로그램
프로그램이란?
디스크 상에 존재하며 실행을 위한 명령어와 정적 데이터의 묶음
우리는 컴퓨터를 사용할 때 여러 개의 프로그램을 동시에 실행시킨다.
예를 들어, 웹 브라우저, 슬랙, 게임, 음악 플레이어 등을 동시에 실행할 수 있다.
그렇다면, 적은 개수의 CPU 밖에 없는데, 어떻게 운영체제는 무한대에 가까운 CPU가 있는 듯한 환상을 만들어 낼까?
바로 OS는 CPU를 가상화 하여 CPU가 여러 개 존재한다는 환상을 제공한다.
하나의 프로세스를 실행하고, 얼마 후 중단시키고 다른 프로세스를 실행하는 작업(문맥 교환)을 반복해 가상 CPU가 존재하는 듯한 환상을 준다.이를 시분할 기법(개체들을 공유, 공간 분할)이라고 한다.
스케줄링 정책
- 과거 정보(직전에 어떤 프로그램이 자주 실행되었는지)
- 워크로드(어떤 유형의 프로그램들이 실행되었는지)
- 성능 측정 결과(시스템이 대화성능 혹은 처리량을 높이려 하는지)
프로세스의 개념
프로세스에 대해 알려면 하드웨어의 상태부터 알아야 한다.
메모리
하드웨어 상태 중 가장 중요한 구성 요소
명령어를 저장
실행 프로그램이 읽고 쓰는 데이터 저장
주소 공간(Address Space)
프로세스가 접근할 수 있는 메모리
레지스터
프로세스의 하드웨어 상태를 구성하는 요소 중 하나
- PC, program counter 프로그램 카운터 : 프로그램의 어느 명령어가 실행 중인지 (= IP, instruction pointer 명령어 포인터)
- Stack Pointer 스택 포인터 : 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때
- Frame Pointer 프레임 포인터 : 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때
프로세스 API(인터페이스)
- 생성 : 새로운 프로세스 생성
- 제거 : 할 일을 다하면 스스로 종료, 필요없는 프로세스 중단
- 대기 : 어떤 프로세스의 실행 중지를 기다림. 대기 인터페이스
- 각종 제어 : 프로세스를 일시 정지하거나 재개(다시 시작)
- 상태 : 프로세스 상태 정보, 얼마 동안 실행되었는지 또는 프로세스가 어떤 상태에 있는지 등을 포함
프로세스 생성
탑재 (load) : 프로그램에서 프로세스로(코드와 정적데이터)
초기 운영체제들은 프로그램 실행 전에 코드와 데이터를 모두 메모리에 탑재하였다.
현재의 운영체제들은 프로그램을 실행하면서 코드나 데이터가 필요할 때 필요한 부분만 메모리에 탑재하는 방식으로 이 작업들을 늦추었다.(Lazy loading)
이와 관련된 개념으로는 페이징과 스와핑 동작 등이 있다.
메인 메모리(RAM)의 스택에 일정량의 메모리를 할당한다. 인자를 초기화 해준다.
또한 메인 메모리(RAM)의 힙에 메모리 영역을 할당한다(동적으로 할당된 데이터를 저장하기 위해). 따라서 힙은 연결 리스트, 해시 테이블, 트리 등 크기가 가변적인 자료 구조를 위해 사용된다.
file descriptor : 입출력과 관련된 초기화 작업을 수행(영속성)
- 표준 입력
- 표준 출력
- 표준 에러
프로세스 상태
- 실행 Running : 프로세스는 프로세서를 실행 중(명령어 실행 중)이다.
- 준비 Ready : 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 상태, 대기중
- 대기 Blocked : 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시키는 연산
- 프로세스 제어 블록(PCB) : 프로세스의 관리를 위한 정보를 저장하는 자료 구조
- 프로세스 리스트(process list) : 대기 상태인 프로세스를 파악해 입출력 요청이 완료되면 적절한 프로세스를 깨워 준비 상태로 전이시킬 수 있는 최적의 자료구조
- 레지스터 문맥 register context : 프로세스가 중단되었을 때 해당 프로세스의 레지스터값들을 저장, 이 레지스터 값들을 복원하여 운영체제는 프로세스 실행을 재개 한다.
적절한 자료구조와 상태를 이용해 운영체제는 프로세스가 성공적으로 실행했는지, 프로세스는 종료되었지만 메모리에 남아있는 상태인지 등을 검사한다.
📌 회고
핀토스 과제를 통해 OS를 구현 해봤지만, 구현했다고 말하기 민망할 정도로 아는게 부족함을 느꼈다.
책을 읽으면서 이런 이유 때문에 그때 연결리스트를 사용했구나! 싶은 순간이 많았다.
힙 메모리 역시 자료구조로 연결리스트, 해시, 트리를 쓰는지 모르고 있었다..
자료구조의 장단점과 메모리와의 관계를 공부해보는 방향으로 가야 할 것 같다.
📌 개선 방향
B-tree, 연결 리스트, 해시 등 자료 구조에 대한 내용을 공부해야 할 것 같다.
스터디원과 2주에 한번 대면하는 방향으로 바꿨다.
만나기 전에 어떤 부분을 공부하고 어떤 주제로 이야기 나누는게 더 좋을지 스터디 방식을 고민해봐야겠다.
📌 참고 문서
운영체제 : 아주 쉬운 세 가지 이야기
'CS(ComputerScience) > OSTEP' 카테고리의 다른 글
스케줄링: 멀티 레벨 피드백 큐 (0) | 2023.08.22 |
---|---|
스케줄링: 개요 (0) | 2023.08.22 |
제한적 직접 실행 원리 (0) | 2023.08.08 |
프로세스 API (0) | 2023.07.31 |
운영체제 개요 (0) | 2023.07.18 |