728x90
운영체제
운영체제 개요
- 프로그램은 매우 단순한 일을 한다.
- 명령어를 반입(fetch)하고, 해석(decode)하고, 실행(execute) 한다.
- 명령어 작업을 완료한 후, 프로세서는 다음 명령어로 또 그 다음 명령어로 프로그램이 완전히 종료될 때까지 실행을 계속한다.
- 운영체제는 가상화(virtualization)라고 불리는 기법을 사용한다. 운영체제는 프로세서, 메모리, 또는 디스크와 같은 물리적인 자원을 이용해서 일반적이고, 강력하고, 사용이 편리한 가상형태의 자원을 생성한다. 때문에 운영체제를 가상머신(virtual machine) 이라고 한다.
- 사용자 프로그램의 프로그램 실행, 메모리 할당, 파일접근과 같은 가상머신과 관련된 기능들을 운영체제에게 요청할 수 있도록, 운영체제는 사용자에게 API를 제공한다. 보통 운영체제는 응용프로그램이 사용 가능한 수 백개의 시스템콜을 제공한다.
- 마지막으로, 가상화는 많은 프로그램들이 CPU를 공유하여 동시에 실행 될 수 있게 한다. 프로그램들이 각자 명령어와 데이터를 접근 할 수 있게한다. 프로그램들이 디스크등의 장치를 공유 할 수 있게 한다. 이러한 이유로 운영체제는 자원관리자(resource manager)라고도 불린다. CPU, 메모리, 및 디스크는 시스템의 자원이다. 효율적으로 이들 자원을 관리하는 것이 운영체제의 역할이다.
CPU 가상화
- 하드웨어의 도움을 받아 운영체제는 CPU 시스템에 많은 수의 가상 CPU가 존재한다는 환상(illusion)을 만들어 낸다. 하나의 CPU 또는 소규모 CPU 집합을 무한개의 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것을 CPU가상화(virtualiziong the CPU)라 한다.
메모리 가상화(Virtualizing Memory)
- 우리가 사용하고 있는 컴퓨터에서의 물리메모리 모델은 바이트의 배열이다. 메모리를 읽기 위해서는 데이터에 주소를 명시해야 한다. 메모리에 쓰기(혹은 갱신) 위해서는 주소와 데이터를 명시해야 한다.
- 메모리는 프로그램이 실행되는 동안 항상 접근된다.
- 운영체제가 메모리 가상화(virtualizing memory)를 하기 때문에 이런 현상이 생긴다. 각 프로세스는 자신만의 가상 주소공간을 갖는다. 운영체제는 이 가상 주소공간을 컴퓨터의 물리메모리로 매핑한다. 하나의 프로그램이 수행하는 각종 메모리 연산은 다른 프로그램의 주소공간에는 영향을 주지 않는다.
병행성(Concurrency)
- 프로그램이 한 번에 많은 일을 하려 할 때(동시에) 발생하는 그리고 해결해야 하는 문제들을 가리킬 때 이 용어를 사용한다.
- 병행성 문제는 운영체제 자체에서 발생한다. 하지만 운영체제만의 문제는 아니다. 멀티 쓰레드 프로그램도 동일한 문제를 들어낸다.
영속성(Persistence)
- DRAM 같은 장치는 데이터를 휘발성(volatile) 방식으로 저장하기 때문에 메모리의 데이터는 쉽게 손실 될 수 있다. 데이터를 영속적으로 저장할 수 있는 하드웨어와 소프트웨어가 필요하다. 저장장치는 모든 시스템에 필수적이다.
- 하드웨어는 입출력 혹은 I/O 장치 형태로 제공된다. 요즘에는 solid-state drives(SSDs)가 많이 사용되고 있기는 하지만 장기간 보존할 정보를 저장하는 장치로는 일반적으로 하드 드라이브(hard drive)가 사용된다.
- 디스크를 관리하는 운영체제 소프트웨어를 파일 시스템(file system)이라고 부른다. 파일 시스템은 사용자가 생성한 파일을 시스템의 디스크에 안전하고 효율적인 방식으로 저장할 책임이 있다.
- CPU나 메모리 가상화와는 달리 운영체제는 프로그램 별로 가상 디스크를 따로 생성하지는 않는다.
- open(), write(), close 같은 시스템콜은 운영체제에서 파일시스템이라고 불리는 부분으로 전달된다. 파일 시스템은 요청을 처리하고 경우에 따라 사용자에게 에러코드를 반환한다.
- 운영체제는 시스템콜이라는 표준화된 방법으로 장치들을 접근 할 수있게 한다. 운영체제는 표준 라이브러리 처럼 보이기도 한다.
- 대부분의 파일 시스템은 성능향상을 위해 응용프로그램들이 요청한 쓰기 요청들을 모아서 한번에 처리한다. 응용프로그램 입장에서는 요청한 쓰기의 내용들이 실제로 저장장치에 기록될 때까지 일정시간의 지연이 발생하는 것이다. 여러 문제가 발생할 수 있는데, 디스크에 기록하려고 모아놓은 내용 중 일부가 이미 디스크에 쓰였을 수도 있고, 기록 순서가 뒤 바뀔 수도 있다. 쓰기 중에 시스템의 갑작스런 고장에 대비해서 많은 파일 시스템들이 저널링(jouraling)이나 쓰기-시-복사(copy-on-write)와 같은 기법을 사용한다. 이 기법들은 고장이 발생하더라도, 시스템을 정상 상태로 복구 될 수 있게 한다.
설계 목표
- 가장 기본적인 목표는 시스템을 편리하고 사용하기 쉽게 만드는데 필요한 개념(abstraction)들을 정의하는 것이다.
- 운영체제의 설계와 구현에 중요한 목표는 성능이다. 다른 말로 표현하면 오버헤드를 최소화 하는 것이다.(minimize the overhead)
- 오버헤드는 시간과 공간의 형태로 나타난다.
- 또 다른 목표는 응용프로그램들 간의 보호, 그리고 운영체제와 응용프로그램간의 보호이다. 그리고 운영체제와 응용프로그램간의 보호이다. 운영체제는 한 프로그램의 악의적인 또는 의도치않은 행위가 다른 프로그램에게 피해를 주지 않는다는 것을 보장해야 한다. 보호는 운영체제의 원칙 중 하나인 고립(isolation) 원칙의 핵심이다. 프로세스를 다른 프로세스로부터 고립시키는일은 보호의 핵심이고 운영체제가 해야 하는 일중 많은 부분의 근간이 된다.
- 운영체제는 계속 실행되어야 한다. 운영체제가 실패하면 그 위에서 실행되는 모든 응용 프로그램도 실패하게 된다. 이러한 종속성 때문에 운영체제는 높은 신뢰성(reliability)을 제공해야 한다.
- 시스템의 목적에 따라, 운영체제는 다른 목표를 지향하게 되고, 구현이 달라진다.
배경 소개
라이브러리를 넘어서 : 보호
- Atlas 컴퓨팅 시스템에 의해 시스템콜이라는 아이디어가 발명되었다. 운영체제와 일반 라이브러리가 구분되는 사건이다.
- 시스템 콜과 프로시저 호출의 결정적 차이는 시스템 콜은 제어를 운영체제에게 넘길 때 하드웨어 특권 수준(hardware privilege level)을 상향 조정한다는 것이다. 사용자 응용프로그램은 사용자 모드(user mode)라고 불리는 상태에서 실행된다. 사용자 모드에서는 응용프로그램이 할 수 있는 일을 하드웨어 적으로 제한한다.
- 시스템 콜은 보통 trap이라고 불리는 지정된 트랩 핸들러 함수에게 제어권을 넘기고 특권 수준을 커널모드(kernel mode)로 격상시킨다. 트랩 핸들러 함수는 운영체제가 미리 구현해 놓는다. 커널모드에서 운영체제는 시스템의 하드웨어를 자유롭게 접근할 수 있으며, 입출력 또는 메모리 할당과 같은 작업을 할 수 있다.
- 운영체제가 서비스를 완료하면 return - from - trap 특수 명령어를 사용하여 제어권을 다시 사용자에게 넘긴다. 이 명령어는 응용프로그램이 출발했던 지점으로 제어권을 넘기는 동시에 사용자 모드로 전환한다.
728x90
'책 > 운영체제' 카테고리의 다른 글
운영체제 6. 스케줄링 : 멀티 레벨 피드백 큐(MLFQ : Multi-Level Feedback Queue) (1) | 2024.03.03 |
---|---|
운영체제 5. 스케줄링 : 개요 (0) | 2024.03.02 |
운영체제 4. 제한적 직접 실행 원리(Limited Direct Execution) (0) | 2024.03.01 |
운영체제 3. 프로세스 API (0) | 2024.02.29 |
운영체제 2. 프로세스 (0) | 2024.02.29 |