운영체제 요약 - 1. 서론
1.1. 운영체제가 하는 일
운영체제는 사용자가 하드웨어를 효율적이고 편리하게 사용할 수 있도록 한다. 컴퓨터 시스템의 자원들을(CPU 시간, 메모리 공간 등) 프로그램과 사용자에게 할당하고 관리한다.
또한, 프로그램의 실행과 입출력 장치의 작동 등을 제어하는 제어 프로그램이기도 하다. 컴퓨터에서 항상 실행되는 프로그램으로, 커널이라고도 불린다.
1.2. 컴퓨터 시스템의 구성(Computer-System Organization)
1.2.1. 컴퓨터 시스템 연산(Computer-System Operation)
범용 컴퓨터 시스템은 공유 메모리에 대한 접근을 제공하는 공통 버스와 이에 연결된 여러 개의 장치 제어기(controllers)와 하나 이상의 CPU로 구성되어 있다. 메모리 제어기는 메모리 접근 순서 등을 관리한다.
컴퓨터에 전원이 들어오면, 펌웨어(firmware)라 알려진 읽기 전용 메모리(ROM)나 EEPROM에 저장 되어있는 부트스트랩 프로그램이 하드 디스크같은 보조 기억 장치에서 운영체제를 메모리에 적재한다. 그 후 운영체제가 사용자에게 서비스를 제공한다.
하드웨어는 시스템 버스를 통해 CPU에게 인터럽트 신호(입출력 요구 등)를 보낼 수 있으며, 소프트웨어는 시스템 호출(system call)로 인터럽트를 발생시킬 수 있다. 이 경우, CPU는 실행 중인 프로그램을 잠시 멈추고 인터럽트를 처리하는 서비스 루틴을 수행한 후 원래 프로그램으로 돌아온다.
1.2.2. 저장 장치 구조(Storage Structure)
CPU는 명령어를 메모리에서만 가져올 수 있으므로, 프로그램은 반드시 메모리에 있어야 한다. 메모리의 내용은 CPU 내부의 레지스터로 옮겨져 수행된다.
속도, 가격, 크기, 휘발성 여부 등에 따라 다양한 저장 장치 시스템이 존재한다(NVRAM, SSD, 플래시 메모리 등).
1.2.3. 입출력 구조(I/O Structure)
장치 제어기는 로컬 버퍼 저장 장치를 가지고 있으며, 장치로부터 들어오는 데이터를 버퍼에 저장한다. 이후 CPU에게 인터럽트를 보내 버퍼에 있는 데이터를 CPU에게 전송한다.
하지만, 입출력의 내용이 CPU를 거쳐 메모리로 이동하면 시간이 낭비될 수 있다. 따라서 직접 메모리 접근(DMA)이 사용된다. 이는 CPU의 도움 없이 메모리와 직접 소통하여 데이터를 주고 받을 수 있다.
1.3. 컴퓨터 시스템 구조(Computer-System Architecture)
1.3.1. 다중 처리기 시스템(Multiprocessor Systems)
CPU가 하나만 사용되면 단일 처리기(single-processor)이고 여러 개가 사용되면 다중 처리기(multiprocessor) 또는 멀티코어라고 한다. 처리기가 많아지면 처리량이 증가하며, 하나의 처리기가 고장나도 시스템이 정지하지 않기에 신뢰성이 향상된다.
다중 처리기 시스템은 두 가지 형태를 지닌다.
- 비대칭적 다중 처리
- 하나의 주 처리기가 시스템을 제어함(작업 스케줄링 등)
- 다른 처리기들은 주 처리기의 명령을 수행하거나 미리 정의된 일을 수행함
- 대칭적 다중 처리
- 주종 관계가 없이 공유 메모리를 사용함.
- 각 처리기에는 로컬 레지스터와 캐시 메모리가 존재
최근 CPU 설계는 하나의 칩에 여러 개의 코어(core)를 포함시키는 것이다. 이는 멀티코어라 불리며, 칩 내의 통신이 칩 사이의 통신보다 빠르기 때문에, 단일 코어를 여러 개 가진 칩보다 효율적이다.
1.3.2. 클러스터형 시스템(Clustered Systems)
클러스터 시스템은 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성한다. 클러스터 컴퓨터는 저장 장치를 공유하고 근거리 통신망이나 InfiniBand와 같은 고속의 상호 연결망으로 연결된다.
1.4. 운영체제의 구조(Operating-System Structure)
운영체제 내부 구조는 다양하기에 공통점들을 설명한다.
운영체제의 가장 중요한 면은 다중 프로그램을 할 수 있는 능력이다. 여러 작업을 메모리에 적재하고, 이들 중 하나를 선택해 실행한다. 작업이 입출력의 종료를 기다리는 일 등으로 대기할 때, CPU는 다른 작업을 실행함으로써 CPU이용률을 증가시킨다.
운영체제는 어떤 작업을 메모리에 올릴 지 결정하는 작업 스케줄링, 동시에 실행 준비된 작업 중 하나를 선택하는 CPU 스케줄링도 관리한다. 또한 파일 시스템, 디스크, 자원 보호, 작업 동기화, 통신 등을 관리한다.
1.5. 운영체제 연산(Operating-System Operations)
1.5.1. 이중 연산 모드(Dual-Mode and Multimode Operation)
운영체제의 적절한 동작을 보장하기 위해, 운영체제 코드의 실행과 사용자 코드의 실행을 구분할 수 있어야 한다. 즉, 적어도 두 개의 독립된 연산 모드, 사용자 모드와 커널 모드(수퍼바이저 모드, 시스템 모드 혹은 특권 모드)를 필요로 한다.
이를 위해 모드 비트라고 불리는 하나의 비트가 현재의 모드를 나타내기 위해 하드웨어에 추가되었다. 그리고 사용자 프로그램이 불법적인 명령을 수행하려 하거나 사용자 주소 공간이 아닌 메모리에 접근을 시도하는 등과 같은 오류를 막기 위해 일부 명령을 특권 명령으로 지정한다.
하드웨어는 특권 명령이 커널 모드에서만 수행되도록 한다. 모드 규칙을 위반하는 오류가 탐지되면, 적절한 오류 메세지가 주어지며, 프로그래머가 조사할 수 있도록 프로그램의 메모리가 파일로 덤프된다.
1.5.2. 타이머(Timer)
타이머는 운영체제가 CPU에 대한 제어를 유지할 수 있도록 보장한다.
사용자 프로그램이 무한 루프에 빠지거나 시스템 호출에 실패하여. 제어가 운영체제로 복귀 하지 않는 경우를 방지한다.
프로그램에 할당된 제한 시간이 초과되면 운영체제에게 제어가 돌아간다.
1.6. 프로세스 관리(Process Management)
실행되고 있는 프로그램을 일반적으로 프로세스라고 한다. 프로그램은 디스크에 저장된 파일의 내용과 같이 수동적 개체인 반면, 프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터(PC)를 가진 능동적 개체이다.
다중 스레드 프로세스는 복수 개의 프로그램 카운터를 가지고 있으며, 이 카운터들은 각 스레드가 실행할 다음 명령어를 가르킨다. 운영체제는 프로세스 중지, 동기화, 생성, 제거, 스케줄 등을 관리한다.
1.7. 메모리 관리(Memory Management)
프로그램이 수행되기 위해서는 메모리에 적재되어야 한다. CPU 이용률과 컴퓨터 응답 속도 개선을 위해, 메모리에 여러 개의 프로그램이 유지되어야 한다.
이를 위해 운영 체제는 메모리 관리 기법을 사용한다. 메모리의 어느 부분이 사용되고 있으며 누구에 의해 사용되고 있는지를 추적한다. 또한 어떤 프로세스를 메모리에 적재하고 제거할지 결정하고, 메모리 공간을 할당하고 회수한다.
1.8. 저장장치 관리(Storage Management)
1.8.1. 파일 시스템 관리(File-System Management)
컴퓨터는 여러 타입의 물리적 매체에 정보를 저장할 수 있다. 운영체제는 저장 장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다.
저장 장치와 그것을 제어하는 장치를 관리함으로써 파일의 추상적인 개념을 구현한다. 저장 장치의 다양한 특성과 접근, 생성 방법 등을 사용자가 알 필요 없도록 파일을 관리한다.
1.8.2. 대용량 저장장치 관리(Mass-Storage Management)
대부분의 컴퓨터 시스템은 하드 디스크를 프로그램과 데이터를 위한 저장 매체로 사용하고 있다. 운영체제는 디스크 자유 공간의 관리, 저장 장소 할당, 디스크 스케줄링을 관리한다.
운영체제는 사용자가 컴퓨터 파일 시스템을 통해 저장 장치에 접근할 수 있도록 파일 및 디렉토리를 만드는 마운트도 담당한다.
1.8.3. 캐싱(Caching)
캐시 메모리와 같이 접근 속도가 빠른 저장 장치에 자주 사용되는 정보를 보관한다면 접근에 소비되는 시간이 줄어든다. 캐시의 크기와 교체 정책을 잘 선택하면 모든 접근의 90% 정도를 캐시에서 얻을 수 있다.
하지만 캐시의 크기에 한계가 있기 때문에, 캐시 관리가 중요한 문제가 된다. 특히, 여러 개의 CPU와 각각에 로컬 캐시가 있다면 주 메모리의 데이터가 동시에 여러 캐시에 존재할 수 있다. 이때 한 캐시에서 값의 갱신이 이루어질 경우, 다른 캐시의 값을 수정하여 캐시의 일관성을 다루어야 한다.
1.8.4. 입출력 시스템(I/O Systems)
운영체제의 입출력 시스템은 버퍼와 캐싱 등 메모리 관리, 장치 드라이버, 데이터 전송 등을 관리한다.
1.9. 보호와 보안(Protection and Security)
컴퓨터 자원에 대해 프로그램 또는 사용자들의 접근을 제어하고 바이러스, 식별자 도용 등을 막아야 한다. 운영체제는 사용자 식별자, 그룹 식별자, 유효 사용자 식별자 등을 사용하여 그에 맞는 권한을 부여하고 관리한다.
1.10. 커널 자료 구조(Kernel Data Structures)
운영체제 구현에 사용되는 기본 자료 구조들이 있다. 리스트, 스택, 큐, 트리, 해시 맵, 비트맵 등이 사용된다.
1.11. 계산 환경(Computing Environments)
여러 계산 환경의 경계가 흐려지고 있다.
1.11.1 이동형 컴퓨팅(Mobile Computing)
스마트폰, 태블릿 컴퓨터를 말한다. 애플(ios), 구글 안드로이드(android) 운영체제가 널리 쓰이고 있다.
1.11.2. 분산 시스템(Distributed Systems)
분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있다.
1.11.3. 클라이언트 서버 컴퓨팅(Client-Server Computing)
클라이언트의 요구에 서버가 응답하는 방식이다. 클라이언트 데이터 요청에 응답하는 데이터베이스를 실행하고 있는 서버, 웹 브라우저 클라이언트에게 파일을 전달하는 웹 서버 등이 있다.
1.11.4. 피어 간 컴퓨팅(Peer-to-Peer Computing)
클라이언트와 서버가 서로 구별되지 않는다. 각 피어는 서비스를 요청하느냐 제공하느냐에 따라 클라이언트 및 서버로 동작한다. Skype 등이 있다.
1.11.5. 가상화(Virtualization)
가상화는 운영체제가 다른 운영체제 내에서 하나의 응용처럼 수행될 수 있게 한다. 가상화 기술은 guest라 불리는 여러 운영체제 복사본들을 수행하며, 각 게스트는 자신의 응용을 수행한다.
예를 들어, 윈도우는 host 운영체제이고, VMware는 VMM(virtual machine manager)일 수 있다. VMM은 guest 운영체제를 수행하고, 이들의 자원 이용을 관리하며 각 게스트를 서로로부터 보호한다.
1.11.6. 클라우드 컴퓨팅(Cloud Computing)
클라우드 컴퓨팅은 계산, 저장장치, 응용 등을 네트워크를 통한 서비스로 제공한다.
- 소프트웨어 서비스(SaaS, Software as a service): 인터넷을 통해 사용 가능한 응용(스프레드시트 등)
- 플랫폼 서비스(PaaS, Platform as a service): 응용에 맞게 준비된 소프트웨어 스택(데이터베이스 서버 등)
- 하부구조 서비스(IaaS, Infrastructure as a service): 인터넷을 통해 사용 가능한 서버나 저장장치
1.11.8. 실시간 내장형 시스템(Real-Time Embedded Systems)
특정한 작업만을 수행하며, 운영체제 없이 응용 전용 칩만으로 구동되는 시스템도 있다. 내장형 시스템은 대부분 실시간성이 요구된다. 정해진 시간 제약 내에 올바른 결과를 내야 한다.
댓글남기기