[운영체제 - 공룡책] Chapter 01. OS Introduction

HEEJOON MOON·2021년 9월 8일
0

운영체제 - 공룡책

목록 보기
1/5

운영체제(Operating System)은 컴퓨터 하드웨어들을 관리하는 소프트웨어입니다. 또한 user와 computer hardwares들 간의 중간자 역할을 하고 application programs들의 basis를 제공합니다. OS의 놀라운 점으로는 매우 다양한 장치와 computing 환경들 속에서도 존재한다는 것입니다. OS의 가장 큰 역할로는 resources들을 programs들에 배분하는 것입니다.

Chapter objectives
1. 일반적인 컴퓨터 시스템 조직과 역할들을 설명합니다
2. Modern multiprocessor computer system의 구성 요소들을 설명합니다
3. user mode에서 kernel mode로의 transition(변화)를 설명합니다
4. OS systems들이 다양한 컴퓨팅 환경에서 어떻게 사용되는지 설명합니다
5. Free, open-source OS의 예시를 살펴봅니다.

1.1 What Operating Systems Do

컴퓨터 시스템은 크게 hardware, operating system, application programs, user로 분류할 수 있습니다.

  • Hardware : CPU, Memory, I/O(input/output) devices 등이 있습니다. 시스템의 기본 연산 자원들이 속해 있습니다
  • Application programs : compiler, web-browser등 우리가 사용하는 프로그램들을 지칭합니다.
  • Operating systems : hardware를 통제하며, 다양한 application programs들을 조율하는 역할을 하면서 resources들을 효율적으로 관리합니다.

1.1.1 User View

OS는 user가 쉽게 사용하도록 고안된 것입니다. 즉 다양한 devices들을 쉽게 사용할 수 있도록 도와주는 것이 바로 OS라고 할 수 있습니다. 많은 모바일 기기들은 user들의 개입을 통해 제어하지만, Embedded computer와 같이 user 개입을 고려하지 않은 것도 있습니다.

1.1.2 System View

컴퓨터의 관점에서 OS는 hardware와 깊은 연관이 있습니다. 이러한 맥락으로, OS를 resources을 할당하는 것으로 볼 수 있습니다. CPU time, memory space, 저장 공간, I/O 장치들에 관한 문제들을 해결하는 것입니다. 살짝 다른 관점으로는, OS를 control program으로 보는 것입니다. Errors 방지나 적절하게 사용하는지 control하는 것 역시 OS의 역할입니다

1.1.3 Defining Operating systems

다양한 컴퓨터 설계들과 역할로 인하여, 현재 OS는 많은 역할과 기능을 하고 있습니다. 초기 컴퓨터는 군사용 연산 목적에서 시작하였습니다. 이후 트랜지스터가 2배씩 계속 증가함에 따라, 컴퓨터 크기가 줄고 다양한 기능을 얻음에 따라, 컴퓨터는 general한 목적에도 사용되기 시작하였습니다.

Computer systems의 근본적인 목표는 user의 problems을 쉽게 해결해 주는 것입니다. 이를 위해서 hardwares들이 개발되었고, hardwares들 제어하기 위한 application programs들도 개발되었습니다. 하지만 이러한 프로그램들은 일일이 다루기 매우 어려웠고, 이 프로그램들의 공통적인 연산을 묶어 Operating System을 개발한 것입니다.

운영체제에 대한 정의는 다양하게 있었습니다. 언제나 실행되는 프로그램(커널)이라고 일반적으로 정의할 수도 있습니다. 커널은 크게 system programs와 application programs로 나눌 수 있습니다. system programs는 커널의 part는 아니지만, OS와 연관되어 있는 반면, application programs은 OS와 연관되지 않은 모든 프로그램을 말합니다.

OS Definitions
1) Always running kernel
2) Middleware frameworks that ease application development & provide features
3) System programs that aid in managing systems

Why study operating systems?
: 모든 codes들이 OS위에서 돌아가기 때문에, OS의 기능과 역할을 알아야만 효율적이고 적절한 프로그래밍을 할 수 있습니다. 프로그램을 만들고자 하는 사람에게 OS에 대한 상식은 매우 중요하다고 합니다

1.2 Computer System Organization

현대 컴퓨터들은 하나 이상의 CPU와 common bus 에 연결된 device controllers (구성요소에 대한 접근과 memory를 공유 )로 구성됩니다. Device controller는 제어가능한 주변 장치들과 local buffer storage 사이의 데이터 전송을 담당합니다. OS는 각각의 Device controller에 대응하는 device driver를 가지고 있습니다. CPU와 device controller는 같이 작동할 수 있으며, 메모리를 가지고 경쟁합니다.

1.2.1 Interrputs

I/O devices과 같은 hardwares들은 trigger되어서 signal을 system bus를 통해 CPU에 보내주게 됩니다. 인터럽트(interrupt)란 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말합니다.

  • HW interrupt
    devices에서 얻은 request들을 CPU에서 연산을 통해 처리해주도록 알려주는 것도 Interrupts라고 볼 수 있다.
    CPU는 인터럽트를 감지하면 지금 실행중인 기계어 코드를 중단하고 해당 인터럽트를 위한 처리 프로그램으로 점프하여 해당 일을 수행 한다. 인터럽트 처리를 위한 루틴을 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이라고 한다. 인터럽트는 주로 하드웨어적으로 CPU 코어(CPU-core)에 입력되고, 현재 진행중인 기계어 코드가 종료되면 실행한다.
    Interrupted된 CPU들은 원래 연산을 멈추고, 이 interrupt가 발생한 I/O device driver의 연산을 처리합니다(interrput service). Interrupt sevice가 다 끝나면, CPU는 다시 중단되었던 원래 연산을 재시작합니다. 또한interrupt services들을 처리하는 코드들이 저장된 memory address를 가진 intterupt vector를 이용하여, CPU는 interrput service를 제공합니다.

  • SW interrupt
    인터럽트를 소프트웨어적으로 실행하는 방법도 제공한다. 인터럽트 기계어 명령에 의해 실행된다. x86의 경우 INT 명령어가 소프트웨어 인터럽트 명령어이다. 리눅스 커널과 같은 운영 체제에서 응용 프로그램의 저수준 입출력 함수가 실행되면, 해당 실시간 라이브러리 함수에 의해 소프트웨어 인터럽트가 실행된다. 이것을 시스템 콜(system call)이라고 하고, 함수의 기능에 따라 드라이버를 구별하고 드라이버 내의 함수를 지정함과 동시에 데이터를 레지스터를 통해 넘겨준다.

1.2.2 Storage Structure

CPU는 instructions들을 메인 메모리로부터만 불러올 수 있다. 따라서 실행하고자 하는 프로그램들은 먼저 메인 메모리 위에 올라가야 한다. 일반적인 컴퓨터들은 대부분의 프로그램들을 RAM(Random-Access-Memory)라 불리는 메인 메모리 위에서 돌린다. 주로 DRAM(Dynamic-RAM:회로 전압이 중간에 떨어져 충전이 필요. SRAM보다 속도 느림)을 많이 사용한다.

컴퓨터는 다양한 memory 형태를 사용한다.
예를 들어 Bootstrap program은 컴퓨터 전원을 킬때, OS를 로딩하는 역할을 한다.
RAM은 휘발성(전원이 꺼지면 정보가 날라감)이므로, RAM위에 Bootstrap을 올릴 수는 없다. 대신에 빈번하게 written되지 않으며 비휘발성인 EEPROM(electric-erasable-proramable read only memeory)나 firmware에 Bootstrap을 저장한다. EEPROM는 프로그램들을 change할 수는 있지만, 느린 속도로 인하여 보통 static program들 위주로 올린다.

모든 형태의 메모리는 bytes의 array형태이다. 각 byte마다 고유 주소를 가지고 있으며, instruction에 따라 특정 메모리 주소를 load/store한다. load instruction은 byte/word를 메인 메모리서 CPU내 register(cpu 메모리)로 옮기고, Store instructions은 register에서 메인 메모리로 옮긴다.

이상적인 것은 메인 메모리에 영구적으로 data가 저장되는 것이다. 하지만 이것은 아래와 같은 2가지 이유로 불가하다.

  • 메인 메모리는 필요한 모든 프로그램과 데이터를 저장하기에는 너무 작다
  • 메인 메모리는 휘발성이다. 전원이 꺼지면 정보가 다 날라간다.

따라서 대부분의 컴퓨터들은 secondary storages를 두어서 메인 메모리의 연장선 역할을 하게 한다. Secondary storages은 많은 양의 데이터를 영구적으로 보관할 수 있어야 한다.

대표적인 secondary storages로는 HDDS(hard-disk drives: 마그네틱 기반)과 NVM(nonvolatile memory)가 있다. 대부분의 프로그램들은 메인 메모리에 호출되기 전까진 secondary-storage에 저장된다. Secondary-storages는 하지만 느리다는 단점이 있으므로, 적절한 관리를 하는것이 매우 중요하다.

Registers, main memory, secondary storage로 구성되는 구조는 수많은 저장 구조중에 1가지 설계이다. 다른 구성 요소로는 cache memory(CD-ROM, bluray, magnetic tapes)라는 것이 존재한다. 또 다른 것으로 너무 느리고 용량이 커서 devices 백업용으로 사용되는 tertiary storage가 있다. 이러한 다양한 메모리 장치들의 차이점은 결국 속도, 크기, 휘발성이다.


메모리 장치들은 위와 같이 메모리 용량과 접근 속도에 따라 계층 구조가 존재한다. Size와 Speed간의 tarde-off가 존재한다. 또한 다양한 저장 장치들은 휘발성/비휘발성이다. 휘발성 메모리 장치들은 반드시 비휘발성 장치에 데이터를 저장해야 한다.

상위 4개의 메모리 장치는 반도체 기반 메모리 장치이다. NVM devices들은 4번째 계층에 속하는데, 하드디스크보다 빠르며, flash memory(데스크탑, 노트북, 서버 등에 사용)가 가장 대표적인 형태이다.

OS에서 저장장치는 매우 중요한 역할을 하기 때문에, 자주 언급될 것이다.

  • 휘발성 메모리들을 simple하게 메모리라 부를 것이라 한다
  • 비휘발성 메모리들은 NVS라 칭한다고 한다. 이 NVS secondary-storages은 크게 기계적 장치들과 전자적 장치들로 구분한다. 기계적 장치들은 크고 덜 비싸며, HDD,광메모리 등이 있다. 반면에 전자적 장치들은 작고 비싸며 빠르고, flash-memory,FRAM, SSD등이 있다. Caches들을 설치하여 성능을 더 향상 시킬수도 있다고 한다.

caching concept
information을 faster storage에 저장시키는 개념이다. 자주 쓰는 정보들은 cache에 저장하는 것이 효율적일 것이다. 메인 메모리는 Secondary-storage의 관점에서 Caching concept일 것이다.

1.2.3 I/O Structure

OS의 대부분은 I/O를 관리하는데 할당된다. 시스템의 신뢰도와 성능에 대한 중요성과 devices간의 다른 특성 때문이라고 한다.

다양한 장치들로부터 얻은 데이터들은 common bus를 통해 이동한다. 만약 무거운 데이터를 CPU를 통해 옮기려 할때, Direct Memory Access를 이용하여 CPU의 개입없이 memory와 장치와 소통하게 한다.

1.3 Computer System Architecture

Definitions of Computer System Components

  • CPU : instuctions을 실행하는 하드웨어
  • Processor : 한 개 이상의 CPUs를 가지는 chip
  • Core : CPU의 연산 단위
  • Multicore : 같은 CPU에서 여러개의 연산 코어를 포함하는 것
  • Multiprocessor : 여러개의 프로세서를 가지는 것

1.3.1 Single-Processor Systems

전통적인 컴퓨터 시스템들은 단일 코어를 사용했다. 코어는 instructions과 registers를 실행하는 요소이다. 하나의 CPU에서 한 개의 process만 처리가 가능한 시스템이다.

1.3.2 Multi-Processor Systems

현대 컴퓨터들은 multiprocessor systems 기반이다. 이러한 시스템들은 보통 하나의 CPU에 2개 이상의 processor를 탑재하였다. multiprocessor systems의 장점으로는, 적은 시간에 많을 일을 할수 있게 된 것이다. 하지만 processor를 많이 한다고 해서 기대만큼 성능이 개선되지는 않는다. (오버헤드 때문)

Symmetric multiprocessing(SMP)가 주로 멀티 프로세싱 시스템에 많이 사용된다. Peer CPU processor들이 모든 작업(OS함수들이나, 사용자 process)를 수행한다. 위의 그림은 SMP의 예시이다. CPU마다 고유 레지스터를 가지고 있지만, system bus에 의해 공유한다. 이러한 방법의 장점으로는 N개의 CPU가 있으면 N개의 process를 동시에 실행할 수 있다는 것이다. 하지만 CPU가 분리되어 어떤 것은 overload되지만 다른 것은 놀고 있는 문제가 발생할 수 있다. 이를 막기 위해 data structures를 Processor들이 공유하여, processor간 processes와 resources를 동적으로 분배하여 workload variance를 낮출 수 있다.

위의 경우처럼 같은 프로세서 칩위에 여러개의 코어가 있는 multi-core design도 존재한다. 각 코어마다 고유 register를 가지고 있고, L2 cache에 의해 두 코어가 연결된다.

1.3.3 Clustered Systems

다른 멀티 프로세서 시스템으로는 여러 CPU를 하나로 묶는 clustered system이다. 위의 시스템들과 다른 점으로는 독립적인 시스템들로 구성되었다는 점이다. 보통 이런것을 loosly cluster 되었다고 부른다.

Clusterd system은 주로 high-availablity service를 제공하는데 많이 사용된다. 군집 내의 어떠한 시스템이 고장나더라도, service를 계속 제공 할 수 있다. 또한 여러 컴퓨터 시스템들이 네트워크를 통해 연결됨으로써, 높은 computing performance를 보인다. parellelization(병렬화)가 대표적인 이 기술인데, 프로그램을 여러 요소로 나눈후, cluster내의 개별 코어들이 작동한다.

1.4 Operating-System Operations

OS는 프로그램들이 실행될 환경을 제공한다. 예를 들어, bootstrap은 부팅 시에 OS를 loading하여 시스템을 시작한다. 이를 위해서는 bootstrap은 OS kernel을 메모리 위에 올려야 한다.

1.4.1 Multiprogramming and Multitasking

OS의 가장 중요한 점은 여러개의 프로그램을 실행할 수 있는 능력이다. 많은 user들은 동시간에 여러개의 프로그램을 구동하는 것을 원한다. Multiprogramming은 CPU 사용을 증가시키고, 여러 programs를 조직하여 CPU가 항상 실행될 수 있게 한다. Multiprogrammed system에서 실행중인 프로그램 1개를 process라 부른다.

먼저 OS는 여러개의 프로세스들을 메모리 위에 동시에 올려놓는다. 만약 어떤 프로세스가 실행되고, 잠시 대기할 필요가 있을 때, CPU는 다른 프로세스의 연산을 수행하는 것이다. 이후, 원래 process의 기다림이 끝나면, CPU는 다시 원래 process로 돌아간다. 이렇게 하여 CPU가 놀지 못하게 만드는 것이다.

Multitasking은 multiprogramming의 논리적인 연장이다. 이 역시 CPU가 번갈아가며 process들을 수행하지만, 더 빈번하게 switching되어 user에게 빠른 응답시간을 준다. 우리가 만약 YOUTUBE를 보면서 카톡을 하는 경우, CPU는 계속 번갈아가며 유튭과 카톡의 process를 처리할 것이다.

동시에 memory에 여러 process를 올리기 위해서는 메모리 관리가 필요하다. 만약 여러 process들이 동시에 실행될 준비가 되면, 시스템은 다음에 어떤 process를 선택하여 실행할 것인지를 정해야 한다. 이것이 CPU scheduling이다.

Multiprogramming과 Multitasking은 모두 파일 시스템이 필요하다. 이것은 주로 secondary storage에 있어서, storage 관리도 필수적이다. 시스템은 또한 resource의 부적절한 사용을 막아야하며, process 동기화와 소통에 대한 메커니즘을 제공해야 한다. 만약 이것이 안되면, deadlock(forever wiating for one another)에 빠질 수 있다.

1.4.2 Dual-Mode and Multimode Operation

OS와 User는 HW, SW resource를 공유하기 때문에, 잘못된 프로그램이 다른 프로그램들을 잘못 실행되게 해서는 안된다. 예를 들어 초보 개발자들이 OS를 잘못 건드리는 프로그램을 만드는 경우. 이를 막기 위해서는 OS-defined code와 user-defined code가 분리되어야 한다. 이렇게 operation mode를 크게 User modeKernel mode(supervisior,system mode)로 분리할 수 있다. 이는 하드웨어에 mode bit를 추가하여, 0이면 kernel, 1이면 user로 구분한다.

위의 그림처럼 만약 user application에서 OS의 service request(System call)가 들어오면, 시스템은 kernel모드로 전환되어 request를 실행한다. 즉 User가 direct하게 OS codes를 건들 수 없게 하여, 시스템을 보호하는 것이다. 특히 Hardwares의 경우 User가 잘못 건들면 안되기 때문에, OS가 control을 가지고, kernel mode에서 직접적인 통제를 한다.

1.5 Resource Management

OS는 resource 관리를 해준다. CPU, 메모리공간, file-storage, I/O devices등의 자원을 OS는 반드시 관리해야 한다.

1.5.1 Process Management

Process란 실행중인 프로그램을 말한다. Process는 CPU시간, memory files, I/O devices와 같은 특정 resource를 필요로 한다. Process 실행동안 resource들은 할당된다. Process가 종료되면 OS는 다시 resource들을 돌려받는다.

프로그램 자체는 process가 아니다. 프로그램은 수동적인 반면, Process는 능동적이다. 단일 스레드 프로세서는 1개의 program encounter를 가져서, 순차적으로 Process들이 실행된다. 반면 multi 스레드 프로세서는 여러개의 Program encounter를 가져서, 주어진 thread마다 다음 instructions을 pointing한다.

Process는 System의 동작 단위이다. 시스템은 여러 Process로 구성되며, 몇개는 OS Process들이며 나머지는 USER Process이다.

Process 관리에서 OS의 역할
1. user와 system 프로세스를 만들면서 삭제해야 한다.
2. CPU에서 프로세스와 thread Scheduling
3. 프로세스 중단 및 재개
4. 프로세스 동기화 메커니즘 제공
5. 프로세스 소통을 위한 메커니즘 제공

1.5.2 Memory Management

메인 메모리는 현대 컴퓨터 시스템의 연산에 핵심적이다. 메인 메모리는 CPU와 I/O 장치들과 공유되어, 빠르게 data에 접근 가능한 저장소이다. 폰노이만 구조서, CPU는 한 cycle에서 instructions을 읽으며, 동시에 데이터를 읽고 쓴다. 무엇보다 메인 메모리는 CPU가 직접적으로 바로 접근할 수 있는 large 저장 장치이다. CPU가 디스크에 있는 데이터를 처리하기 위해서는 먼저, 데이터가 CPU서 생성된 I/O call에 의해 메인 메모리에 전송되어야 한다. Instructions 역시 마찬가지로 메인 메모리에 있어야 한다.

프로그램이 실행되기 위해서는, 절대 경로가 메모리에 load되어야 한다. 명령어와 데이터를 절대 주소를 생성하여 메모리에 불러오고, 프로그램이 종료되면 다음 프로그램이 로딩되고 실행된다

CPU 활용과 user에 대한 반응 속도를 향상시키기 위해서는, 여러 프로그램들이 메모리에 있어야 하며, 이에 따른 메모리의 관리도 필요하다. 메모리 관리에 대한 많은 scheme들이 있으며, 특정 시스템에 맞춘 scheme을 고르기 위해서는 특히 시스템의 하드웨어 설계를 고려해야 한다.

Memory 관리에서 OS의 역할
1. 메모리의 어떤 부분이 사용되고 있고, 어떤 프로세스가 사용하는지 추적하고 있어야한다.
2. 메모리 공간을 필요만큼 할당하고, 징수해야 한다.
3. 메모리 밖으로 어떤 process와 데이터를 이동시켜야 할지 결정해야 한다.

1.5.3 File-System Management

User에게 컴퓨터 시스템을 편리하게 만들기 위해서, OS는 논리적이고 통일된 정보 저장의 관점을 제공해야 한다. 저장 장치의 물리적인 속성들을 추상화하여 file이라는 논리 저장 단위로 정의한다.

파일 관리는 OS에서 가장 시각적인 요소이다. 컴퓨터는 정보를 여러 타입의 물리적 장치에 저장할 수 있다.

파일은 creator에 의해 지정된 관련 정보들의 모음이다. 보통 파일은 프로그램과 데이터를 대표한다. 파일의 형식은 form이 없는 것부터 엄격하게 지켜지는 것까지 있다.

OS는 파일의 추상적인 개념을 대용량 저장 미디어와 이를 제어하는 장치를 통해 실행한다. 파일들은 디렉토리에 조직화 되어있어, 사용하기 용이하다. 많은 사용자가 파일에 접근할때는, 어떻게 접근하는지 통제하는 것이 현명하다

File-system 관리에서 OS의 역할
1. 파일을 만들고 삭제
2. 디렉토리를 만들고 삭제
3. 디렉토리나 파일을 수정
4. 파일들을 대용량 저장 장치에 매핑
5. 비휘발성의 안정적인 저장장치에 파일들을 백업

1.5.4 Mass-Storage Management

현대 컴퓨터 시스템들은 2차 저장소를 가지고 있어야 한다. 보통 HDDs나 NVM device를 사용하여 프로그램들과 데이터를 저장한다. 대부분의 프로그램들은 메모리에 로드 되기 전까지 저장되어 있다. 적절한 2차 저장소의 관리는 컴퓨터 시스템에서 중요하다. OS는 2차 저장소와의 아래와 같은 connections을 담당하는 역할을 한다.

  • Mounting and unmounting
  • Free-space management(빈 공간 관리)
  • Storage allocation(기억 장치 할당)
  • Disk Scheduling(디스크 스케줄링)
  • Partition(분할)
  • Protection(보호)

2차 저장소는 광범위하고 빈번하게 사용되므로, 효율적으로 사용되어야 한다. 하위 시스템들과 통제 알고리즘들이 따라 연산 속도에 영향을 끼친다. 2차 저장소보다 느린 장치들도 있다. CD, DVD, Blu-ray와 같이 예비 저장소도 있는데, 시스템 성능에는 crucial하진 않지만, 이 역시도 관리되어야 한다.

1.5.5 Cache Management

Caching은 컴퓨터 시스템에서 중요한 개념이다. 저장소(메인 메모리 등)에 저장된 정보를 빠른 저장소인 캐시에 복사하는데, 만약 정보가 필요한 경우 캐시에 있는지 먼저 확인한 후, 없으면 storage서 가져온 후 캐시에 저장한다. Registers은 메인 메모리들을 위한 캐시이다. 프로그래머들이나 컴파일러는 레지스터 할당과 대체 알고리즘을 통해 어떤 정보를 캐시에 남길 것인지 결정한다

다른 캐시들은 하드웨어에서만 일어난다. 예를 들어, 대부분의 시스템은 명령어 캐시를 남기는데, 만약 이것이 없으면 CPU는 메인 메모리에서 로딩되는 동안 기다리게 된다. 많은 시스템들은 memory hierarchy를 가지고 있으며, 1개 이상의 고속 캐시를 가지고 있다.

캐시의 크기는 제한적이므로, 이 역시 관리가 필수적이다. 다른 저장 장치간의 정보 이동은 하드웨어의 설계와 운영체제에 따라 명시적, 암시적일 수 있다. CPU register로 데이터를 옮기는 것은 하드웨어 기능인 반면, 디스크에서 메모리로의 데이터 이동은 OS 기능이다.

1.5.6 I/O System Management

OS의 또 다른 목적 중 하나는, 입출력 장치들의 세부사항들을 사용자로부터 숨기는 것이다. 입출력 장치는 다음과 같은 구성요소가 있다.

  • 메모리 관리 장치
  • 일반적인 device-driver
  • 특정 하드웨어들을 위한 drivers
    Device driver만이 오로지 장치 세부 사항들을 알고 있다.

1.6 Security and Protection

profile
Robotics, 3D-Vision, Deep-Learning에 관심이 있습니다

0개의 댓글