안녕하세요? 허니입니다. 운영체제를 공부하는데 기본적인 용어와 개념들을 알아야 합니다. 많은 분들이 기본 개념들을 모르기 때문에 운영체제가 많이 어렵다라고 말씀들 하시는 것 같습니다. 그렇게 때문에 오늘 기본적으로 알아야 할 운영체제 개념들에 대해서 포스팅 해 보겠습니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.

 


오늘의 주제


 OS를 전체적으로 이해하는 데 기본이 되는 몇 개의 개념들

 Kernel

 Interrupts

 Trap

 System call

 DMA

 Context Switching

 PCB

 


OS를 전체적으로 이해하는 데 기본이 되는 몇 개의 개념들

 

 Kernel

 

커널은 컴퓨터 시스템의 전원을 처음 켰을 때 메모리로 올라와 시스템이 동작되는 동안 계속 머무르는 부분으로 OS에서 가장 기초적이고 핵심적인 기능을 담당한다. 커널을 통해 메모리, 파일, 주변장치 등과 같은 시스템을 구성하는 중요한 자원들을 관리할 뿐만 아니라 시간관리, 프로세스관리, CPU 스케줄링, 메모리관리, 입출력 제어 등과 같이 컴퓨터 운영에 필요한 핵심사항들을 처리한다. 우리는 서론에서 컴퓨터 시스템 구조를 공부해봤다. 하나의 프로그램을 실행시킬 때는 그림 9와 같은 컴퓨터 시스템 구조와는 또 다른 컴퓨터 시스템 내부구조를 그려낼 수 있다. 여기서 커널의 역할은 하드웨어에 두 사람 이상이 동일한 작업을 실행시켰을 때 중재자의 역할을 하고 또한 여러 사용자가 시스템을 동시에 사용할 때 각자가 독자적으로 작업할 수 있도록 영역을 확보해준다. 앞서 OS를 한 국가의 정부와 비교해 보았다. 그렇다면 커널은 정부의 대표인 공무원이라고 비교하면 적절할 듯 하다.

 

그림 9 커널 영역

 

그림에서 커널이 하드웨어를 둘러싸고 있는 것은 하드웨어를 제어하는 기능을 갖고 있기 때문이다.  또한 application과 커널 사이에 자리잡고 있는 Library는 사용자가 프로그램을 실행시킬 때 커널에게 응용프로그램을 이해시켜 프로그램이 수행될 수 있도록 기능하게 된다. 만약 Library가 존재하지 않는다면 프로그램마다 OS가 바뀌어야 한다. 다시 말해 하나의 프로그램에는 그 프로그램을 이해하도록 설계된 OS가 꼭 짝을 이뤄야 하는 것이다. 어떠한 시스템 내에서라도 Library를 동일하게 구성함으로 어떠한 OS 내에서도 응용프로그램은 동일한 기능을 수행할 수 있는 것이다.


 Interrupts

 

이 단어를 사전에서 찾아보면 가로막다. ‘중단하다’로 해석된다. 사무실에서 A 프로젝트 기획안을 작성하는 도중 전화가 걸려온다면 그는 분명 일을 잠깐 멈추고 전화를 받을 것이다. 전화용건을 해결하고 난 다음 다시 기획안 작성을 하게 될 것이다. 이렇듯 하나의 프로그램 수행 중 현재의 프로그램과 상관없는 사건이 발생한다면 어떨까? 이러한 사건이 생기면 인터럽트를 일단 걸어 수행중인 작업을 잠시 멈추고 새로 발생한 사건을 처리하게 된다.

인터럽트에는 하드웨어와, 소프트웨어 인터럽트가 있다. 우리가 앞으로 배우게 될 프로세스 수행의 결과로 발생하는 인터럽트는 소프트웨어 인터럽트이고 하드웨어 장치로부터 비동기적으로 발생하는 것은 하드웨어 인터럽트이다. 즉 프로세스 수행과 무관한 외부적 원인으로 인터럽트가 발생되는 것이 바로 하드웨어 인터럽트이다. 중요한 것은 인터럽트 서비스 루틴은 가능한 짧아야 한다는 것이다. 원래 수행 중이었던 작업을 두고 인터럽트 서비스를 길게 처리할 수는 없을 것이다. 제2, 제3의 인터럽트가 발생했을 경우 그것 역시 제 시간에 수행돼야 하기 때문이고 인터럽트 발생이전 수행 중이었던 프로그램 역시 계속 수행해야 하기 때문이다. 이러한 인터럽트를 해석하고 서비스 루틴을 수행하는 역할을 하는 것을 인터럽트 핸들러(interrupt handler) 라고 한다.

 

그림 10 인터럽트

 

그렇다면 어떤 경우에 인터럽트를 사용될까? 대표적인 예는 키보드의 경우를 생각해 볼 수 있다. 만일 인터럽트를 사용하지 않는다면, CPU는 아주 빈번히 키보드의 입력을 매번 확인을 해야 할 것이다. CPU가 키보드 입력을 확인하는 주기는 아주 짧은 반면에 사람이 키보드를 두드리는 속도는 매우 느리다면, CPU는 키보드의 입력이 없음에도 불구하고 확인을 할 것이다. 하지만 입력이 없을 때의 확인은 아주 불필요한 것이고 이러한 작업은 CPU의 입장에서는 귀중한 CPU 수행시간을 낭비하는 것이다. 이러한 점을 착안해서 인터럽트 방식이 고안된 것이다. 키보드는 사용자가 키보드에 입력을 하면 키보드는 이러한 사실을 CPU에게 알리고 CPU는 어떠한 키가 눌러졌는지를 감지하게 된다. 즉, 키보드의 입력이 없는 동안에 CPU는 많은 일을 할 수 있을 것이다.


 Trap

 

트랩은 간단하게 말해 커널 안으로 들어가 커널 서비스를 제공받기 위한 하나의 절차이다. 예를 들어 컴퓨터 시스템 사용자가 작업도중 시간을 알고 싶다는 요청을 하면 트랩을 통해 커널 안으로 요청이 들어가고 커널은 트랩을 통해 들어온 요청이 실행 가능한 것인지를 판단해 서비스를 제공하게 되는 것이다. 바로 사용자와 커널간에 의사소통을 해주는 아주 유용한 통역자인 셈이다. 트랩은 커널과 Library의 경계선상에서 기능을 수행하게 된다.


 System call

 

System call을 간략하게 정의하자면 커널에게 작업을 의뢰하는 것이다. 트랩에서 언급했듯 작업도중 시간을 알고 싶다는 사용자의 요청 하나가 바로 하나의 system call인 것이다. 한글프로그램상에서 저장된 파일을 불러오는 것, 새로운 문서를 작성해 파일명을 지정해 저장하는 것, 디렉터리상에서 파일이름을 삭제하는 것 바로 이러한 작업 모두가 System call을 통해 수행되는 것이다. 프로그램 수행 중에 System call을 호출하면 트랩은 OS에게 System call을 전달한다. 그리고 나면 커널은 System call이 어떤 처리를 원하는 것인가를 확인하고 그에 해당하는 서비스를 처리한다. System call을 커널, 트랩과 연관 지어 설명하자면, 우리가 동사무소에 어떤 업무 처리를 위해 찾아갔을 때 (주민등록 떼기, 전입, 전출 신고, 출생신고 등) 그 하나하나의 업무들은 바로 system call과 동등한 의미가 되는 것이다. 그리고 우리는 그 처리를 담당자에게 요구하기 위해 해당용지에 기재 사항들을 적게 되는데 이러한 과정은 트랩이 담당하는 것이고 담당공무원이 업무를 처리해 주는 것 그것은 바로 커널의 역할인 것이다.

그림 11 System Call


 DMA(direct memory access)

 

프로그램 처리 중 입력/출력 처리속도가 느린 것을 염두에 두고 고안해낸 방법이다. 바로 입력/출력이 동작할 때 CPU와는 관계없이 직접 DMA 컨트롤러가 메모리에 접근해 입력/출력을 처리하는 것이다. DMA로 인해 입력/출력 처리 중에도 CPU는 쉼 없이 다른 처리를 할 수 있는 것이다. DMA 처리과정을 살펴보면 먼저 CPU는 DMA컨트롤러에서 입력/출력 내용들을 카피할 것을 명령한다. DMA 처리과정에서 CPU의 역할은 이 한가지로 막을 내린다. DMA 컨트롤러는 메모리에 접근해 입력/출력 내용을 카피하게 되고 그 내용은 디스크에 저장되게 되는 것이다. 바로 입력/출력 시간 동안 CPU의 낭비를 막기 위해 프로그램 처리를 분업화해 CPU는 자신의 영역 업무 만에 매달릴 수 있게 한 것이 바로 DMA이다. 결국 DMA를 사용함으로써, CPU의 사용률을 올릴 수 있게 된다.

 

그림 12 DMA


 문맥전환(Context Switching)

 

문맥전환이란 CPU의 수행 내용이 어떠한 조건에 의해 바뀌는 것을 의미한다. 쉽게 표현한다면 옷을 갈아입는다고 말할 수 있을 것이다. 옷을 갈아입는 사람은 CPU가 되고 옷은 수행되는 내용을 뜻한다. 현재 수행 중이었던 프로세스가 어떠한 조건에 의해 잠시 수행이 멈춰지고 그 다음 프로세스가 수행됨을 말한다. 예를 들어 타임쉐어링처럼 하나의 프로그램이 CPU를 사용할 수 있는 시간을 고정시켜 제한된 시간을 하나의 작업이 다 쓰고 나면 다음작업을 수행하게 될 때 문맥전환이 일어나게 되는 것이다.

 

문맥교환이 일어나게 되는 조건들은 다음과 같다.

1. 타임 퀀텀이 다 된 경우, 하나의 CPU로 여러 작업들을 처리하게 되면 작업을 보다 빠르게 수행하기 위해 일정시간을 정해 놓고 그 시간 동안 작업이 완료되지 않았을 경우 다음 작업을 수행하게 된다. 바로 CPU의 수행작업이 바뀌게 되는 것이다.

2. 입력/출력이 발생되어 그 유휴 시간 동안 CPU가 다른 작업을 수행할 경우, 입력/출력은 CPU를 통해 이뤄지는 작업이 아니므로 CPU는 여유 시간 동안 다른 작업을 수행할 수 있는 것이다.

 

그림 13 문맥 전환 (Context Switching)


 PCB (Process Control Block)

 

프로세스가 수행되기 위해서는 프로세스만이 필요할까? 여러 프로세스들이 하나의 시스템 내에서 처리되기 위해선 그 프로세스의 정보가 유지되어야 한다. PCB에는 프로세스에 어떤 자원이 할당되어 있고 또 프로세스가 어떠한 상태에서 수행 중인가를 나타내는 일체의 관련정보가 수록되어 있다. 사람이란 존재 역시 그 실체만으로 자신을 표현할 수는 없는 것이다. 이름이 무엇인지, 나이가 얼마고 하는 일은 무엇인지 등과 같은, 그 사람을 표현해줄 수 있는 모든 정보가 따라다니기 마련이다. 다시 말해 문맥교환에 필요한 모든 정보가 PCB에 수록되어 있는 것이다. 커널은 각각의 프로세스에 대한 PCB를 갖고 있다. 그렇다면 PCB에는 어떤 정보들이 수록되어 있는가?

- 프로세스가 준비, 실행, 대기 등 현재 어떤 상태인가.

- 프로세스가 다음 어떤 명령을 처리하나.

- 프로세스가 CPU를 얼마나 사용했나.

- 먼저 처리되어야 할 프로세스는 어떤 것인가.

등 모든 정보가 꼼꼼히 PCB에 저장되어 있다. OS가 CPU를 다른 프로세스의 작업을 처리하고 이전 프로세스에게 돌아왔을 때 이러한 정보가 남아있지 않다면 CPU는 분명 당황해 할 것이다.

 

그림 14 PCB

 


요점정리

 

 OS를 이해하기 위한 기본개념

- Kernel

커널은 컴퓨터 시스템의 전원을 처음 켰을 때 메모리로 올라와 그 이후 항상 주기억장치에 머무르는 부분이다. OS와 상등한 개념을 가지고 있다.

- Interrupts

하나의 프로그램 수행 중 현재의 프로그램과 상관없는 사건이 발생한다면 어떨까......

이러한 사건이 생기면 인터럽트를 걸어 수행중인 작업을 잠시 멈추고

새로 발생한 사건을 처리하게 된다.

- Trap

트랩은 간단하게 말해 커널모드 안으로 들어가 커널 서비스를 제공받기 위한 하나의 절차이다.

- System call

System call을 간략하게 정의하자면 커널에게 작업을 의뢰하는 것이다.

- DMA (direct memory access)

바로 입력/출력이 동작할 때 CPU와는 관계없이 직접 DMA 컨트롤러가 메모리에 접근해 입력/출력을 처리하는 방법으로 입력/출력 처리 중에도 CPU는 쉼 없이 다른 처리를 할 수 있다.

- Context Switching

Context Switching이란 CPU의 수행 내용이 어떠한 조건에 의해 바뀌는 것을 의미한다.

- PCB (Process Control Block)

PCB에는 프로세스에 어떤 자원이 할당되어 있고 또 프로세스가 어떠한 상태에서 수행 중인가를 나타내는 일체의 프로세스 관련정보가 수록되어 있다.

 

 

목 차

 운영체제를 시작하는 분들을 위해

 운영체제의 역사와 구체적으로 어떤 일들을 수행하나요?

 운영체제의 목표와 역할이 미래에도 계속 증대될까요?

 운영체제를 이해하기 위해 필요한 기본 개념들은 무엇인가요?

 운영체제 프로세스 생애주기(Process Lifecycle)는 무엇인가요?

 운영체제 프로세스 관리(Process Management)는 어떻게 하나요?

 운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까?

 운영체제 스레드(Thread)는 무엇인가요?

 운영체제 스케줄링 (Scheduling)은 어떻게 하나요?

 운영체제 스케줄링 알고리즘의 비교 기준이 있나요?

 운영체제 프로세스 동기화가 무엇인가요?

 운영체제에서 세마포어(Semaphore)란?

 운영체제 메모리 관리(Memory Management)는 어떻게 하나요?

 운영체제 메모리 분할 방법은 어떻게 하나요?

 운영체제 가상메모리(Virtual Memory)는 무엇인가요?

 운영체제 Page in/out, Swapping 등이 Page Table Entry와 어떤 관계인가요?

 운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay)

 운영체제 Page replacement (페이지 대체) 알고리즘이란?

 운영체제 파일시스템(File System)은 어떻게 운영되나요?

 운영체제 파일시스템 내부구조는 어떻게 되나요?

 운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은?

 운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란?

 리눅스 인터럽트 (Interrupt)에 대해 자세히 설명해 주세요.

 인텔 구조에서 운영체제 가상 메모리 (Virtual Memory)는?

 운영체제 아키텍처의 종류는 얼마나 있나요?




안녕하세요? 허니데이즈입니다. 오늘은 지르콘 커널의 구성 객체들이 무엇이 있는지 알아보도록 하겠습니다.



Zircon은 객체 기반 커널이다. 사용자 모드 코드는 거의 독점적으로 객체 Handle을 통해 OS 리소스와 상호 작용한다. Handle은 특정 리소스 범위의 특정 OS 하위 시스템과의 활성 세션으로 생각할 수 있다. 지르콘은 다음과 같은 자원을 적극적으로 관리한다.

 Processor time

 Memory and address spaces

 Device-io memory

 Interrupts

 Signaling and waiting


 응용 프로그램용 커널 객체는 뭐가 있나요?

IPC

1. Channel

2. Socket

3. FIFO


Tasks

1. Process

2. Thread

3. Job

4. Task


Signaling

1. Event

2. Event Pair

3. Futex


Memory and address space

1. Virtual Memory Object

2. Virtual Memory Address Region

3. bus_transaction_initiator


Waiting

1. Port


 드라이버용 커널 객체는 뭐가 있나요?

Interrupts

Resource

Log


 커널 객체와 LK

일부 커널 객체는 하나 이상의 LK 레벨 구조를 래핑한다. 예를 들어 Thread 객체는 하나의 thread_t를 래핑한다. 그러나 채널은 LK 레벨 오브젝트를 랩핑하지 않는다.


 커널 개체 라이프사이클은?

커널 개체는 ref-counting 된다. 대부분의 커널 객체는 syscall 중에 생성되며 syscall의 출력으로 주어진 Handle 값을 바인드하는 핸들에 의해 refcount = 1에서 활성 상태로 유지된다. Handle 오브젝트는 Handle Table에 첨부되어있는 동안 계속 유지한다. Handle은 Handle Table에서 분리되어(예를 들어 sys_close()를 통해) 커널 오브젝트의 refcount를 감소시킨다. 대개 마지막 Handle이 닫히면 커널 객체 refcount는 0에 도달하여 소멸자가 실행된다. refcount는 새로운 Handle(객체 참조)이 생성되고 직접 포인터 참조(일부 커널 코드에 의해)가 획득 될 때 증가한다. 그러므로 커널 객체의 수명은 프로세스를 생성한 프로세스의 수명보다 길 수 있다.


 Dispatchers의 역할은 무엇인가요?

커널 오브젝트는 Dispatcher에서 파생된 C++ 클래스로 구현되며 구현된 메소드를 대체한다. 예를 들어 Thread 객체의 코드는 ThreadDispatcher에서 찾을 수 있다. 일반적인 의미의 커널 객체만 신경 쓰는 코드가 많이 있다. 이 경우 fbl::RefPtr<Dispatcher>라는 이름이 사용된다.


 커널 개체 보안은 어떻게?

원칙적으로 커널 객체는 본질적인 보안 개념을 갖고 있지 않으며 권한 부여 검사를 수행하지 않는다. 보안 권한은 각 Handle에서 보유한다. 단일 프로세스는 동일한 권한을 가진 동일한 오브젝트에 대해 서로 다른 두 개의 핸들을 가질 수 있다.


출처: https://fuchsia.googlesource.com/zircon/+/master/docs/objects.md


 

지르콘 커널에 대해 더 알고 싶으시다면 아래 목차에서 클릭! 

지르콘 커널이란?

Zircon

지르콘 커널 개발 환경 구축하기

Getting Started

지르콘 커널 개발에 기여하는 방법

Contributing Patches

지르콘 커널의 개념 알기

Concepts Overview

지르콘 커널 구성요소(Kernel Objects)는?

Kernel Objects

지르콘 커널에서 사용되는 프로세스(Process)란?

Process Objects

지르콘 커널에서 사용되는 쓰레드(Thread)란?

Thread Objects

지르콘 커널에서 사용되는 핸들(Handles)이란?

Handles

지르콘 커널의 시스템콜하는 방식은?

System Calls

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 모델

Driver Development Kit

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 프로토콜

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 지르콘 드라이버 개발

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 플랫폼 버스

지르콘 커널의 드라이버 개발 키트 사용하는 방법 - 장치 펌웨어

지르콘 커널을 시험하는 방법은?

Testing

지르콘 커널의 취약점은 무엇일까?

Hacking notes

지르콘 커널의 메모리와 자원 사용은 어떻게 할까?

Memory usage analysis tools

지르콘 커널과 LK(Little Kernel)의 관계는?

Relationship with LK

지르콘 커널을 위한 마이크로 벤츠마크는?

Micro-benchmarks


+ Recent posts