2024.11.27 - [컴퓨터과학/컴퓨터구조: CSAPP] - 1.6 저장장치는 계층구조를 이룬다
운영체제
운영체제란(What)
운영체제는 하드웨어와 응용프로그램 사이의 소프트웨어 계층이다.
운영체제의 역할(Why)
운영체제는 응용 프로그램이 하드웨어를 잘못 건드리는 것을 막는다. 그리고 하드웨어에 대해 별도의 설정 없이도 사용할 수 있는 방법들을 제공한다. 즉, 응용 프로그램의 관점에서 운영체제는 하드웨어를 감싸는 방어막인 동시에 하드웨어 자원을 쉽게 사용할 수 있는 인터페이스이다.
운영체제의 원리(How)
운영체제는 역할 수행을 위해 추상화를 사용한다. 추상화란 사용자에게 세부적인 내용은 숨기고 반드시 필요한 내용만 제공하는 행위이다. 하드웨어는 입출력 장치, 메모리, 그리고 프로세서로 구성된다. 운영체제는 다음의 추상화 기법을 통해 응용 프로그램이 하드웨어를 사용할 수 있게한다.
- 파일: 입출력 장치
- 가상메모리: 입출력 장치 + 메모리 장치
- 프로세스: 입출력 장치 + 메모리 장치 + 프로세서
1.7.1 프로세스
프로세스란
프로세스는 프로그램 실행의 추상화다.
프로세스가 필요한 이유
프로그램을 실행하기 위해서는 디스크로부터 파일을 읽어와서 메모리에 로딩 후 프로세서가 인스트럭션을 실행해야한다. 즉, 프로그램 실행을 위해 메모리, 프로세서, 디스크 모두가 관여한다. 응용프로그램이 이 모든 것을 관리하는 것은 쉽지 않다. 따라서 운영체제는 프로세스를 통해 하드웨어 제어를 응용 프로그램으로부터 숨긴다.
프로세스의 동시 실행
프로세서는 순간마다 프로세스 하나만 처리할 수 있다. 하지만 사용자는 프로세스 여러개가 동시에 실행되는 것처럼 느낀다. 운영체제는 문맥전환(context switch)을 통해 여러 프로세스들이 동시에 실행되는 것처럼 보이게한다.
문맥(context)
문맥이란 프로세스가 실행되는데 필요한 상태정보다. 상태정보는 PC, 레지스터 파일, 메인메모리의 현재 값을 포함한다.
문맥전환(context switch)
아래의 그림은 시간의 흐름에 따라 문맥전환이 일어나는 과정을 보여준다.
프로세스 A는 실행이 되다가 프로세스 B한테 제어권을 넘겨야한다. 이때 프로세스 A는 중단되고 A의 문맥이 저장된다. 프로세스A는 시스템콜을 통해 커널에게 제어권을 넘겨주고 커널은 필요한 작업을 한 뒤에 프로세스 B에게 제어권을 넘긴다.
참고로 커널이란 운영체제 내부의 코드가 있는데 하드웨어 제어와 같이 응용프로그램이 다루면 안되는 작업들을 대신해서 다룬다. 응용프로그램이 이런 작업들이 필요한 경우 시스템 콜을 통해 커널에게 제어권을 넘긴다.
프로세스 B는 작업을 끝내고 다시 커널을 통해 프로세스 A에게 제어권을 넘긴다. A의 컨텍스트는 다시 불러온 후에 메모리 등에 로딩되어 중단된 작업을 마저 진행한다.
1.7.2 쓰레드
프로세스가 실행되는 과정을 제어 흐름 또는 쓰레드라고 한다. 프로세스는 둘 이상의 쓰레드를 가질 수 있다. 예를 들어 사인회에 가서 사인을 받기 위해서는 줄을 서야하는데 줄을 서는 동안 스텝들이 물을 주고 CD를 주는 작업 등 별도의 흐름이 있는 경우를 상상할 수 있다.
스레드는 프로세스 내부에 존재한다. 따라서 동일한 프로세스에 존재하는 스레드들은 프로세스의 컨텍스트를 공유한다. 즉, 동일한 코드와 데이터를 공유한다.
스레드를 활용하면 프로그램의 성능을 향상시킬 수 있다. 동일한 프로세스 내의 스레드들은 컨텍스트에 접근하는 데에 드는 오버헤드가 발생하지 않기 때문이다. 프로세스 간에 데이터를 공유하려면 통신 오버헤드가 발생한다.
1.7.3 가상메모리
가상메모리란
가상메모리란 운영체제가 프로세스에게 제공하는 메모리와 디스크의 추상화다. 물리 메모리에는 여러 개의 프로세스가 실행되고 있지만 프로세스의 입장에서는 다른 프로세스를 알아야할 필요가 없다. 따라서 운영체제는 물리 메모리를 추상화한 가상메모리를 프로세스에게 제공한다.
가상메모리는 가상주소공간의 형태로 프로세스에게 제공된다.
가상주소공간의 구조
가상주소공간은 프로세스에게 할당 된 고유의 공간이다. 아래에서부터 위로 주소 값이 증가한다. 세부구조와 역할은 위에서부터 아래로 다음과 같다.
- 커널 가상메모리: 운영체제의 코드와 데이터를 위한 공간으로 응용프로그램이 직접적으로 접근 할 수는 없는 영역
- 스택: 함수호출을 구현하기 위한 영역으로 런타임 동안 함수 호출과 반환에 따라 크기가 증감한다.
- 공유 라이브러리: 공유 라이브러리의 코드와 데이터를 저장하는 영역
- 힙: 런타임에 동적으로 증감하는 영역으로 사용자의 메모리 할당·해제에 따라 증감하고 참조 객체가 저장된다.
- 프로그램 코드와 데이터: 코드와 전역변수가 저장되는 영역
1.7.4 파일
파일은 연속된 바이트들이다. 모든 입출력 장치는 파일로 모델링 된다. 따라서 모든 입출력 장치는 하드웨어임에도 불구하고 파일을 읽고 쓰는 작업을 통해 제어할 수 있다. 모든 것은 파일이다.
정리
운영체제
- 운영체제는 하드웨어에 대한 인터페이스다
- 운영체제는 추상화라는 형태로 인터페이스를 제공한다
- 추상화에는 프로세스, 가상메모리, 파일이 있다
프로세스
- 프로세스는 프로그램 실행의 추상화다
- 컨텍스트는 프로세스의 상태정보다
- 컨텍스트 스위치란 동시성 구현을 위한 컨텍스트의 교체다
- 커널이란 하드웨어 제어를 위해 운영체제 상의 실질적인 코드와 데이터다
스레드
- 스레드란 프로세스의 실행단위다
- 동일 프로세스 내의 스레드는 프로세스의 컨텍스트를 공유한다
가상메모리
- 가상메모리는 프로세스가 사용하고 있는 물리메모리에 대한 추상화다
- 가상주소공간은 가상메모리를 제공하기 위한 방법이다
- 가상주소공간은 아래에서부터 위로 ① 코드/데이터 영역 ② 힙 영역 ③ 공통 라이브러리 영역 ④ 스택 영역 ⑤ 커널영역으로 구성한다
파일
- 파일은 하드웨어 장치에 대한 추상화다
- 시스템 내에서 모든 것은 파일이다