본문 바로가기

프로그래밍/운영체제(OS)

운영체제 개요

1. 운영체제

운영체제란 사용자, 응용프로그램과 하드웨어 사이에 있는 소프트웨어 계층이다. 운영체제는 크게 3가지 역할을 한다. 

(1) 응용프로그램에 편리한 interface를 제공
(2) 시스템 자원 관리
(3) 시스템 보호

운영체제는 추상화(abstraction)를 통해 사용자는 내부 복잡한 로직을 알 필요없이 운영체제가 제공하는 시스템콜 이라는 인터페이스를 통해 하드웨어의 자원을 간접적으로 사용할 수 있다. 사용자는 여러개의 프로그램을 동시에 실행시키기를 원한다. 웹브라우저에 켜놓은 여러개의 사이트들, 게임, 동영상플레이어 등등을 동시에 켜놓고 작업을 한다고 생각해 보자. 마치 컴퓨터는 동시에 수십 혹은 수백 개의 프로세스를 실행하는 것처럼 보인다. 이처럼 CPU가 여러개 존재하는 것처럼 보이는 환상을 제공하는 것이 운영체제의 가상화(virtualization)이다. CPU 가상화 말고도 프로그램 한개가 모든 메모리를 점유하는 것처럼 느끼게 하는 메모리 가상화도 있다. 운영체제는 한정정인 자원을 효율적으로 사용할 수 있도록 관리한다. 마지막으로 보호 기능이다. 보호는 운영 체제의 원칙중 하나인 고립(isolation) 원칙의 핵심이다. 프로세스와 프로세스간의 고립을 통한 보호, 그리고 운영체제와 응용프로그램 간의 보호를 제공한다. 또다른 의미의 보호도 있다. 만약 응용프로그램이 디스크의 원하는 위치를 읽을 수 있다고 가정해보자. 문제가 심각해진다. 어떤 프로그램이든 원하는 모든 파일을 읽을 수 있게 되고 개인정보의 보호가 불가능해진다. 여기서 나온 방안이 시스템콜이며 하드웨어 특권 수준(hardware privilege level)을 나누어 응용체제가 할 수 있는 일을 하드웨어 적으로 제한한다. 참고로 사용자 응용 프로그램은 사용자 모드(user mode)에서 실행된다. 시스템콜은 보통 trap이라고 불리는 하드웨어 명령어를 이용하여 호출되는데 시스템콜 시작 시, 하드웨어는 미리 지정된 트랩 핸들러 함수에게 제어권을 넘기고 특권 수준을 커널 모드(kernerl mode)로 격상시킨다.


책에서는 크게 세 가지의 아이디어로 OS 내용을 정리한다.

(1) 가상화(virtualtization)
(2) 병행성(concurrency)
(3) 영속성(persistency)

가상화 종류에는 CPU 가상화와 메모리 가상화가 있다. CPU 가상화는 소수의 CPU로 여러 개의 가상 CPU가 존재하는 듯한 환상을 만들어낸다. 시분할(time sharing)이라 불리는 이 기법은 원하는 수 만큼의 프로세스를 동시에 실행할 수 있게 만든다. 문맥교환(context switching), 프로세스(process), 스케줄링 정책(scheduling policy) 등에 대해서 알아볼 것이다. 메모리 가상화에서는 가상주소(virtual address)라는 추상화를 설명한다. 가상주소를 통해 각각의 응용프로그램들이 마치 자신만의 메모리를 가지고 있는 것처럼 동작하는데, 사실은 운영체제가 물리 메모리를 여러개의 주소 공간이 번갈아 가면서 사용하게 하는 것이다. 응용프로그램은 실제 물리 주소를 사용하지 않고 동일 주소범위의 가상주소를 사용한다. 여기서 세그멘테이션(segmentation), 페이징(paging), 페이지 테이블(page table), 페이지 폴트(page fault) 등에 대해 공부할 것이다. 
병행성에서는 쓰레드(thread), 멀티 쓰레드(multi thread) 프로그램을 실행했을 때 나타나는 여러가지 문제와 락(lock), 컨디션(condition), 세마포어(semaphore) 같은해결 방안을 배울 것이다. 기본적으로 병행성에서 나타나는 문제점은 명령어가 원자적(atomically)으로 실행되지 않기 때문이다. 정수 타입인 그리고 '0' 값을 가지는 변수 'x'가 있다고 해보자. 이 변수의 값을 '1'로 증가시키는 연산을 하려고 한다. 프로그램상에서는 명령어가 하나면 충분하지만 실제로 레지스터에서는 이 값을 레지스터에 탑재(한 번), 레지스터 1 증가(두 번), 레지스터 값을 메모리에 저장(세 번) 이렇게 총 세번의 명령어로 구성된다.
DRAM과 같은 장치는 데이터를 휘발성 방식으로 저장하기 때문에 메모리의 데이터는 쉽게 손실될 수 있다. 이러한 데이터를 영속적으로 저장할 수 있는 하드웨어와 파일 시스템(file system) 같은 소프트웨어들을 다룰 것이다.  

 

'프로그래밍 > 운영체제(OS)' 카테고리의 다른 글

프로세스 스케줄링  (0) 2022.08.28
프로세스  (0) 2022.08.27
운영체제 정리  (0) 2022.08.24