본문 바로가기

CS(ComputerScience)/OSTEP

가상화, 프로세스의 개념

728x90

가상화, 프로세스의 개념

프로세스 = 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 : 입출력과 관련된 초기화 작업을 수행(영속성)

  • 표준 입력
  • 표준 출력
  • 표준 에러

 


프로세스 상태

출처 : [운영체제 : 아주 쉬운 세 가지 이야기] 7장

  • 실행 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