Operating System 이란?
운영체제란?
운영체제는 컴퓨터의 하드웨어를 총체적으로 관리하는 소프트웨어입니다.
이는 사용자와 컴퓨터 하드웨어, 어플리케이션과 컴퓨터 파드웨어 사이를 중개하는 역할도 합니다.
운영체제가 하는 일
컴퓨터의 시스템은 하드웨어, 운영체제, 어플리케이션 프로그램, 사용자 이렇게 4가지로 나눌 수 있습니다.
하드웨어는 크게 CPU, memory, I/O device 로 나눌 수 있습니다. 이 하드웨어들은 기본적인 컴퓨터 자원이라고도 불립니다. 워드 프로세서, 엑셀, 컴파일러, 웹브라우저 등 어플리케이션 프로그램들은 컴퓨터 자원(하드웨어) 를 사용하여 사용자의 computing problem 들을 해결합니다.
여기에서 운영체제는 이 하드웨어를 컨트롤하고 다양한 어플리케이션 프로그램들이 사용할 수 있도록 조정하는 역할을 합니다.
사용자 입장
유저의 입장에서 컴퓨터는 그들이 어떤 인터페이스를 사용하는지에 따라 달라집니다.
-
PC
보통 많은 사람들이 쓰는 노트북이나 PC 는 모니터, 키보드, 마우스로 구성이 되어 있습니다. 이런 시스템은 한 유저가 모든 컴퓨터 자원들을 독점적으로 사용하도록 설계가 되어있습니다. PC 에서의 운영체제는 사용자에게 편의성을 제공하는데 주력하고, 자원의 이용에는 신경을 쓰지 않는 편입니다.
-
모바일 장치
스마트폰이나 테블릿같은 모바일 기기는 키보드와 마우스 같은 기기 대신 터치스크린을 통해 사용자와 소통합니다.
-
임베디드 컴퓨터
가전제품이나 자동차 내의 임베디드 컴퓨터는 화면이 없는 경우도 있습니다. 이런 임베디드 컴퓨터의 운영체제는 사용자의 개입없이 작동하도록 설계되어 있습니다.
시스템 입장
컴퓨터의 입장에서는 운영체제는 하드웨어와 직접적으로 맞닿아있는 프로그램으로 자원 할당자(resource allocator) 의 역할을 가집니다. 자원 할당의 역할을 가진 운영체제는 CPU, memory, storage space, I/O device 등을 이용하여 어플리케이션이 제시한 문제를 푸는데 어떤 자원을 사용할지 효율적(efficiently)이고 공정(fairly)하게 관리하는 것도 중요합니다.
그래서 운영체제란?
여기까지 봤을 때 운영체제는 많은 역할과 기능들을 하는 걸 알 수 있을 겁니다.
사실 운영체제는 컴퓨터, 토스터기, 차, 선박, 우주선, 가구 등 다양한 기기들 안에 다양한 형태로 존재합니다. 이렇게 운영체제는 다양한 형태로 존재하므로 적합한 정의를 하는건 쉽지 않습니다.
그러나 다양한 운영체제의 일반적이고 공통적인 부분을 모으면, 운영체제는 컴퓨터에서 항상 실행되는 프로그램 이라고 정의할 수 있고 이는 우리가 kernel 이라고도 부릅니다.
앞서 설명했던 운영체제의 정의를 모아보자면 아래와 같이 정리할 수 있습니다.
- 컴퓨터의 하드웨어를 관리하는 프로그램
- 사용자에게 편의성을 제공하는 프로그램
- 컴퓨터의 하드웨어 자원들을 사용하여 효율적으로 문제를 해결하는 자원할당자
- 컴퓨터에서 항상 실행되는 프로그램
자원 관리자로서의 운영체제
앞서 본 것처럼 운영체제는 resource manager 입니다. Resource manager 로서 운영체제는 시스템의 CPU, 메모리, storage, I/O 장치 등의 resource 들을 관리해야 합니다.
Process management
프로그램은 CPU 에 의해 실행되지 않으면 그냥 한 덩어리의 instruction 일 뿐입니다. 그러나 이 instruction 을 실행시키면, process 라고 불리우게 됩니다. 그래서 프로그램은 수동적인 개체인 반면, 프로세스는 능동적인 개체라고 할 수 있습니다.
CPU 는 프로세스가 완료될 때 까지 프로세스의 instruction 을 순차적으로 실행합니다. 그러나 만약 다른 프로세스가 또 진행되어야 한다면, 이 다른 프로세스도 별도의 수행순서를 가지고 진행하여야 할 것입니다.
그래서 운영체제는 이런 프로세스들에 대해 다음과 같은 책임을 갖고 작동합니다.
- CPU 에 process 와 thread 를 scheduling 할 것
- Process 들의 생성과 제거, 일시 중지와 재수행
- Process Synchronization 을 위한 기법 제공
- Process Communication 을 위한 기법 제공
Memory management
메인 메모리는 현대 컴퓨터 시스템의 중추적인 역할을 합니다.
프로그램이 수행되기 위해서는 CPU 가 instruction 들을 메인 메모리에서 가져와서 읽어야 합니다.
운영체제는 여기에서 사용자의 요청에 대한 응답속도를 개선하고 CPU 를 효율적으로 사용하하기 위해 메모리에 여러개의 프로그램을 유지해야 하며 이를 위해서는 특정 메모리 관리 기법이 필요합니다.
운영체제는 메모리에 대해서도 다음과 같은 책임이 있습니다.
- 메모리의 어느 부분이 어떤 process 에 의해 사용되고 있는지 추적
- 메모리 공간의 할당과 회수
- 어떤 process 들을 메모리에 적재하고 제거할 건지
File-System management
유저가 컴퓨터 시스템을 편리하게 이용하려면 운영체제는 컴퓨터에 들어있는 정보들을 일관적이고 통일된 구조로 보여줘야 합니다.
그래서 운영체제는 물리적으로 storage 에 저장된 데이터를 하나의 논리적 단위인 file 로 구분하도록 합니다. 이런 file 들을 관리하는 작업들도 운영체제가 하는 일 중 하나이고 file system 이라고 합니다.
이 파일시스템을 유지하기 위해 운영체제는 아래와 같은 일들을 합니다.
- 파일의 생성과 삭제
- Directory 의 생성과 삭제
- 파일을 physical storage 와 mapping 하는 기능
- 파일의 안전한 보관을 위한 백업기능
Mass-Storage management
컴퓨터 시스템은 휘발성인 main memory 를 백업하기 위해 2차 저장소가 필요합니다. 요즘은 이 2차 저장소로 HDD 나, NVM 등의 저장기기를 사용하곤 합니다. 이렇게 2차 저장소에 저장된 프로그램이나 데이터들은 프로그램 실행 시에 main memory 에 불려와 CPU 에 의해 실행되게 됩니다.
운영체제는 이런 mass-storage 를 관리하기 위해 아래와 같은 일들을 합니다.
- 빈 공간 관리
- 디스크 스케줄링
- 파티셔닝
Cache management
캐싱은 컴퓨터 시스템의 중요한 개념 중 하나입니다.
정보는 보통 어떤 저장장치에 보관되는데, 정보가 저장된 저장공간에 따라 불러오는 속도가 다릅니다. 예를 들어 main memory 에 있는 프로그램이나 데이터들은 mass-storage 에서 불러올 때보다 훨씬 빠르게 불러옵니다.
그러나 중복되어 불려지는 데이터나 프로그램의 부분은 더욱 빨리 불러와질 필요가 있었고, 이를 위해 우리는 더 빠른 장치인 캐시에 해당 데이터를 저장하여 불러와 성능을 향상시킬 수 있습니다.
그러나 캐시는 크기가 제한되어 있기 때문에 캐시 관리는 중요한 설계 문제로 성능을 크게 좌지우지합니다.
참고 문헌
Operating System Concepts 10th (공룡책)
양햄찌님 블로그 : https://jhnyang.tistory.com/16
Suhwanc님 블로그 : https://suhwanc.tistory.com/175