본문 바로가기

운영체제(OS)

[운영체제(OS)] 1. Overview

728x90
반응형

 

[목차]

 

1. Operating System?

 

2. Operating System Type

 

3. Computer System Organization

 

4. Interrupt

 

5. Storage Structure

 

6. Computer System Architecture

 

7. Operating System Architecture

 

8. Operating System Operation for Protection

 

 

 

참고)

- https://parksb.github.io/article/5.html

- KOCW 공개강의 (2014-1. 이화여자대학교 - 반효경)

- Sogang Univ. Operating System Lecture Note (2018-2. Prof. Youngjae Kim)

 

  1. Operating System?

 

운영체제(Operating System)는 컴퓨터 하드웨어 바로 위에 설치되어, 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 프로그램이다. 운영체제의 핵심은 커널(Kernel)인데, 커널은 컴퓨터의 전원이 켜지면 항상 메모리에 상주하는 프로그램이다.

컴퓨터를 켠다는 의미의 부팅(Booting)은 커널을 로딩(loading)함으로써 컴퓨터를 시작하는 것이다. 시스템의 파워가 켜지면 처음 부트스트랩(bootstrap) 프로그램이 위치한 메모리에서 실행이 시작된다. 

 

따라서 좁은 의미의 운영체제로는 커널 자체를 말하고, 넓은 의미로는 커널과 여러 주변 시스템을 다루는 유틸리티들을 포함한다. 일반적으로 커널이 같으면 동일한 운영체제로 취급한다. 

 

커널 구현에는 기본적인 리스트(List), 스택(Stack), 큐(Queue), 링크드 리스트(Linked list), 트리(Tree), 해쉬 함수(Hash Function), 비트맵(Bitmap)등의 자료구조가 사용된다.

 

컴퓨터 시스템은 위와 같이 하드웨어(Hardware), 운영체제(Operating System), 각종 소프트웨어, 사용자(User)로 나뉜다. 

이러한 시스템들 사이에서 운영체제의 역할은 사용자 관점과 시스템 관점으로 나뉜다.

 

- 사용자 관점

사용자 관점에서는 컴퓨터를 쉽고 편하게 사용하는 것이 주 목적일 것이다. 따라서 운영체제는 사용자들이 컴퓨터 자원을 공평하게 사용할 수 있도록 도와주고, 그에 따라 사용자가 자원에 대해 신경 쓰지 않도록 해준다. 이를 통해 사용자가 컴퓨터를 쉽게 사용하고, 수행 능력을 높여준다. 

 

- 시스템 관점

시스템 관점에서는 운영체제는 자원 할당자(Resource allocator), 제어 프로그램(Control Program)이다. 운영체제가 컴퓨터 자원을 적절하게 할당하고 제어함으로써 효율적으로 시스템이 돌아갈 수 있도록 만들어준다. 

 

따라서, 위의 역할을 정리하면 운영체제의 목적은 다음과 같다. 

 

1. 컴퓨터 시스템의 자원을 효율적으로 관리 → 사용자 간의 형평성을 유지, 주어진 자원으로 최대한의 성능 

2. 컴퓨터 시스템을 편리하게 사용하도록 

 - 여러 사용자/프로그램이 각각 독자적으로 컴퓨터에서 수행되는 것 같은 환상 제공

 - 하드웨어를 직접 다루는 복잡한 부분을 운영체제가 대행

 

운영체제의 예시로는 크게 유닉스(UNIX)와 MS사에서 만든 운영체제로 나뉜다. 

 

 

  2. Operating System Type

 

운영체제는 크게 세 특징으로 구분 지을 수 있다.

 

1. 동시 작업 가능 여부

 

 1) 단일 작업(Single Tasking)

  - 한 번에 한 작업만 가능한 운영체제이다. 한 명령이 끝나기 전에 다른 명령을 수행할 수 없다. (ex. MS-DOS)

 

 2) 다중 작업(Multitasking)

  - 동시에 두 작업 이상 처리가 가능한 운영체제이다. (ex. UNIX, MS windows)

 

 

2. 사용자의 수 (동시에 여러 사용자 접속 가능 여부)

 

 1) 단일 사용자 (ex. MS-DOS, MS window)

 2) 다중 사용자 (ex. UNIX, NT server)

 

 

3. 처리 방식

 

 1) 일괄 처리(Batch Processing)

  - 작업을 일정량 모아 한 번에 처리하는 방식. 작업이 완전히 종료될 때까지 기다려야 한다.

 

 2) 시분할(Time sharing)

  - 현대 컴퓨터가 사용하는 방식. 여러 작업 수행 시 컴퓨터 처리 능력을 일정 시간 단위로 분할하여 사용

  - 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐

  - Interactive 방식

 

 3) 실시간(Real time OS)

  - 데드라인(Deadline)이 있음. 정해진 시간 안에 어떤 일이 반드시 종료되어야 하는 시스템을 위한 OS

  - ex) 원자로/공장 제어, 미사일 제어, 로봇 제어 등

 

 

 

  3. Computer System Organization

 

현대 컴퓨터는 1개 이상의 CPU장치 컨트롤러(Device Controller)들로 구성되어있다. 그리고 이들끼리 공통 버스(Common Bus)로 연결되어 메모리를 공유한다. 

 

 

각 장치 컨트롤러(Device Controller)마다 로컬 버퍼(Local Buffer)가 있는데, CPU가 메인 메모리와 각 장치의 로컬 버퍼 사이에서 데이터를 이동시킨다. 입출력은 장치에서 로컬 버퍼로 데이터를 전송하는 방식이고, 입출력 장치(I/O device)는 CPU와 동시에 실행될 수 있다. 장치 컨트롤러는 CPU에 인터럽트(Interrupt)를 발생시킴으로써 작업이 끝났음을 알린다. 

 

 

  4. Interrupt

 

인터럽트(Interrupt)는 '방해하다'라는 뜻으로, 신호를 보내 이벤트의 발생을 알리는 것을 의미한다. 컴퓨터가 여러 작업을 동시에 수행하다가 특정 이유로 인해 기존 작업을 잠시 중단해야 할 때 인터럽트 신호를 보내고, 인터럽트를 처리한 뒤 다시 기존 작업으로 돌아온다. 

 

인터럽트는 하드웨어 또는 소프트웨어에 의해 발생할 수 있다.

소프트웨어에 의해 발생된 인터럽트를 트랩(Trap) 이라고 부르고, 프로그램이 오류를 범한 경우인 '예외(Exception)'나 프로그램이 커널 함수를 호출하는 경우인 '시스템 콜(System Call)'로 트랩을 발생시킨다. 

하드웨어는 시스템 버스(System Bus)를 통해 CPU에 신호를 보냄으로써 인터럽트를 발생시킨다. 

 

인터럽트의 종류로는 다음과 같다. 

 

1. Program (Trap or Exception)

 - Arithmetic overflow

 - Division by zero

 - Execute illegal instruction

 - reference outside user's memory space

 - by user's request

2. Timer

3. I/O

4. Hardware failure 

 

인터럽트는 인터럽트 된 명령어의 주소를 저장한 뒤, 인터럽트 벡터(Interrupt Vector)를 통해서 제어권을 인터럽트 핸들러(Interrupt Handler, OS의 일부)로 넘겨준다.

인터럽트 벡터는 인터럽트를 처리할 수 있는 모든 서비스 루틴(Service Routine)의 주소를 저장하고 있는 공간으로, 파일 읽기/쓰기 등과 같은 중요한 동작들이 하드 코딩되어있다. 이렇게 인터럽트를 처리하고 나면 기존 작업으로 돌아온다. 

 

Interrupt Timeline

 

 

  5. Storage Structure

 

커널은 실행기(Executor)를 통해 프로그램을 실행시킨다. 실행기는 기억장치(Storage)에서 실행파일(ex. exe파일 in Window)을 가져오고, 커널이 이를 메인 메모리에 할당해 실행시킨다. 메인 메모리(Main memory)는 CPU가 유일하게 직접 접근할 수 있는 큰 저장 공간이다. 

하지만, 메인 메모리는 너무 작고 전원이 꺼지면 데이터가 모두 사라지는 휘발성(Volatile)이기 때문에, 용량이 크고 저렴하고 비휘발성(Non-volatile)인 보조 기억 장치(Secondary storage)가 필요하다. 

 

휘발성 기억장치 : 메인 메모리, 캐시(Cache), 레지스터(Register)

비휘발성 기억장치 : 자기 테이프(Magnetic Tapes), 광학 디스크(Optical Disk), 자기 디스크(Magnetic Disk), SSD(Soli-State Disk)

 

 

캐싱(Caching)매우 빠르고 작은 저장장치인 캐시(Cache)를 이용하여 컴퓨터의 속도를 높이는 정말 중요한 기술이다. 데이터를 디스크에서 직접 가져오는 것이 너무 느리기 때문에 캐시에 자주 사용될 것 같거나 최근에 사용된 데이터를 담아두고, CPU나 디스크가 캐시의 데이터를 참조할 수 있도록 한다. 파일의 중복성이 증가하지만 속도 또한 증가한다. 

 

캐싱은 지역성(Locality) 원리를 이용한다. 지역성은 시간 지역성(Temporal Locality)과 공간 지역성(Spatial Locality)으로 나뉜다. 시간 지역성은 한 번 접근한 데이터에 다시 접근할 확률이 높다는 것이고, 공간 지역성은 특정 데이터와 가까운 메모리 주소에 있는 다른 데이터에도 접근할 가능성이 높다는 것이다.

 

장치의 데이터를 처리하기 위해 CPU를 거쳐 메모리에 로드하는 방식을 사용하면 인터럽트가 과도하게 발생하여 CPU 자원이 너무 많이 소모된다. 따라서 장치와 메모리를 직접 연결하는 방식DMA(Direct Memory Access)가 도입되었다. 

메모리에 버금가는 속도로 입출력 장치가 데이터를 이동시키며, 장치 컨트롤러에 의해 장치의 데이터가 블록(block) 단위로 직접 메모리에 전달되고 CPU에서는 데이터 이동이 완료되었다는 블록당 한 번의 인터럽트만 발생되므로 효율적이다. 

 

 

  6. Computer System Architecture

 

1. Single-Processor System

 

과거 대부분의 컴퓨터로, 하나의 메인 CPU만 탑재된 시스템이다. 장치에 따라 특별한 목적을 가진 프로세서가 추가되었다. 

 

2. Multi-processor System

 

현대 컴퓨터 시스템으로 2개 이상의 프로세서를 가지고 있다. 각각의 CPU는 각자의 레지스터와 캐시를 가지고 있다. 장점은 다음과 같다.

 

1) 처리량(Throughput)의 증가

- 프로세서가 증가하면 당연히 처리량이 증가하고 더 빠른 연산이 가능하다. 단, 무작정 프로세스를 늘린다고 성능이 한없이 좋아지진 않는다.

 

2) 규모의 경제

- 멀티 프로세서 시스템은 여러 싱글 프로세서 시스템을 구축하는 것보다 비용이 적게 든다. 멀티 프로세서 시스템은 주변 장치(Peripherals)를 공유할 수 있기 때문이다.

 

3) 신뢰성의 증가

- 여러 프로세스에 기능이 분산되면, 한 프로세서가 작동을 멈춰도 시스템은 멈추지 않는다. 

 

3. Multicore Design

 

최근 CPU 설계 트렌드는 하나의 칩(Chip)에 코어(Core)를 늘리는 것이다. 이러한 멀티 프로세서 시스템을 멀티코어(Multicore)라고 부른다. 코어는 동일한 성능의 CPU 여러 개를 1개의 칩 속에 넣어둔 것이라고 보면 된다. 칩 내부의 통신이 칩 사이의 통신보다 빠르기 때문에 더 효율적이다.

 

4. Clustered System

 

멀티 프로세서 시스템의 일종인 클러스터 시스템(Clustered System)은 여러 CPU를 모아놓은 구조이다. 클러스터 컴퓨터들이 하나의 저장소를 공유하고, 이를 네트워크로 연결한 시스템을 보통 클러스터 시스템이라고 한다. 

여러 개의 개별 시스템이 하나로 모여있다는 점에서 여러 CPU가 모여 한 시스템을 이루는 멀티 프로세서 시스템과 약간 차이가 있다.

비동기식 클러스터링(Asymmetric Clustering)과 동기식 클러스터링(Symmetric Clustering)으로 나뉘는데, 비동기식은 하나의 서버가 작업을 수행하고 다른 서버들은 모니터링하면서 대기하는 구조이고, 동기식은 동시에 작업을 수행하면서 서로를 모니터링하는 구조이다. 

 

 

  7. Operating System Architecture

 

운영체제의 가장 중요한 부분 중 하나는 프로그램을 동시에 수행할 수 있는 능력이다. 

 

1. Multiprogramming

 

멀티프로그래밍은 여러 프로그램을 메모리에 로드해두고 한 프로세스가 대기 상태가 되면 다른 프로세스의 작업을 수행하는 시스템이다. CPU는 오직 한 번에 한 작업만 수행할 수 있고, 한 사용자가 CPU, I/O 장치를 오래 사용 못하도록 작업 스케줄링(Job Scheduling)을 통해 작업들이 선택되고 수행된다. 

 

2. Time sharing (Multitasking)

 

멀티프로그래밍에서 더 확장된 시스템이 시분할, 또는 멀티태스킹 시스템이다. 

각 사용자마다 실행 중인 프로그램이 메모리에 최소 1개씩 있고, 이를 프로세스(Process)라고 한다.

시분할 시스템은 프로세스마다 작업 시간을 정해두고 번갈아가면서 작업하는 방식이다. 매우 빠르게 작업들을 Switch 함으로써 작업이 수행되는 동안 사용자가 각각의 작업마다 상호작용할 수 있도록 해준다. 

 

멀티프로그래밍, 멀티태스킹, 시분할 모두 유사한 의미이지만, 차이가 있다.

멀티프로그래밍은 여러 프로그램이 메모리에 로드되어 있어 CPU가 쉬는 비효율을 제거하기 위함이고, 멀티태스킹은 프로세스 간에 CPU를 빠르게 전환함으로써 CPU의 시간을 분할하여 나누어 쓴다는 측면에 중점을 두고 있다. 따라서, 사용자들과의 상호작용 기능을 제공하는지의 여부에 따른 차이가 있다. 

 

이들을 멀티 프로세서(multiprocessor)와 혼동하면 안 된다. 멀티 프로세서는 한 컴퓨터에 CPU가 여러 개 있어 이를 통해 여러 작업을 동시에 수행할 수 있는 것이다. 

 

 

  8. Operating System Operation for Protection

 

운영체제는 사용자와 컴퓨터 자원을 공유하기 때문에 사용자 프로그램이 오류를 일으키거나, 어떤 부정확한 프로그램이 임의로 하드웨어에 접근해 인터럽트를 보내어 다른 프로그램을 부정확하게 실행하는 문제 등을 방지해야 한다. 

 

1. Dual-Mode Operation

 

운영체제는 사용자 프로그램이 마음대로 시스템에 접근하지 못하도록 모드(Mode)를 나눈다. 사용자 프로그램의 잘못된 수행으로 다른 프로그램이나 OS에 피해가 가면 안되므로 보호장치가 필요하기 때문이다.

모드는 유저 모드(User Mode)커널 모드(Kernel Mode)로 나뉘고, 이를 통해 운영체제 자신과 다른 시스템 요소들을 보호한다. 

하드웨어에 의해 Mode bit가 제공된다. Mode bit가 1이면 유저 모드, 0이면 커널 모드임을 나타내므로 이를 통해 현재 모드를 확인할 수 있다.  

 

몇몇 명령문은 커널 모드일 때만 실행될 수 있는 특권 명령(Previleged Instruction)으로 정의되는데, 하드웨어가 이 특권 명령을 커널 모드일 때만 실행한다. 특권 명령은 보안을 해칠 수 있는 중요한 명령어이다.

만약 유저 모드에서 실행되는 경우 하드웨어가 운영체제에 오류임을 알리게 된다. 유저 모드에서 커널 모드의 기능을 호출하고 싶다면 System Call이라는 인터페이스를 이용해야 한다. 

 

 

 

2. I/O Protection

 

모든 I/O 명령문들은 특권 명령이다. 따라서 User Program이 절대 커널 모드에서 제어를 얻을 수 없다. User Program은 이때 인터럽트 벡터(Interrupt vector)에 새로운 주소(address)를 저장한다. 

User Program이 I/O를 하는 과정은 다음과 같다.

 

1) 시스템 콜을 이용하여 Trap을 발생. 인터럽트 벡터의 특정 위치로 이동

2) 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴(Interrupt Service Routine)으로 제어권(Control)이 이동

3) 올바른 I/O 요청인지 확인 후 I/O 수행

4) I/O 완료 시 제어권을 시스템 콜 다음 명령으로 옮김

 

 

3. Memory Protection

 

인터럽트 벡터와 인터럽트 핸들러(handler)에게는 반드시 Memory Protection을 제공해야 한다.

Memory Protection을 위해서 두 레지스터를 추가한다. 

Base register - 범위 중 가장 작은 물리적 메모리 주소 저장

Limit register - 범위의 크기를 저장

 

아래의 그림은 Base와 Limit 레지스터를 사용하는 방식이다. Base와 Base + Limit값을 이용하여 올바르게 메모리에 접근하고 있는지를 판단한다. 

 

4. Timer

 

타이머(Timer)는 특정 주기마다 인터럽트를 발생시키는 기능이다. 이를 통해 사용자 프로그램이 제어권을 운영체제에 넘겨주지 않는 상황을 방지한다. 

타이머는 매 clock tick마다 감소하며, 타이머가 0이 되면 인터럽트를 발생시킨다. 

주로 Time sharing을 구현하는 데 사용되고 현재 시간을 계산하는데도 사용한다. 타이머를 불러오는 명령문은 특권 명령이다. 

 

PC로 보시는 것을 권장합니다. 

피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^

 

 

728x90
반응형