운영체제 CH.1

이지용·2024년 4월 7일

20240328
p. 3~

Chapter 1

서론

운영체제는 컴퓨터 하드웨어를 관리하는 소프트웨어이다. 현대 컴퓨팅 환경에서 운영체제의 역할을 탐구하기 위하여 먼저 컴퓨터 하드웨어의 구성과 구조를 이해하는 것이 중요하다.
운영체제는 덩치가 매우 크고 복잡하므로 부분별로 생성되어야 한다. 이 하나의 부분은 전체 시스템 윤곽에 잘 맞는 일부여야 하며 이 부분들의 입력과 출력, 동작은 주의를 기울여 정의해야한다.
이 장에서는 현대 컴퓨터 시스템의 주요 구성 요소와 운영체제가 제공하는 기능에 대한 일반적인 개관을 제공한다.

이 장의 목표

- 컴퓨터 시스템의 일반적인 구성과 인터럽트의 역할을 기술한다.
- 현대 다중처리기 컴퓨터 시스템의 구성요소에 관해 기술한다. 
- 사용자 모드에서 커널모드로의 전환에 대해 설명한다. 
- 다양한 컴퓨팅 환경에서 운영체제가 어떻게 사용되는지 논의한다. 
- 무료 및공개 소스 운영체제의 예를 제공한다. 

  • 컴퓨터 시스템 구성요소에 대한 개략적 구성도

1.1 운영체제가 할 일

전체 컴퓨터 시스템에서 운영체제가 수행하는 역할에 대해 논의를 시작한다.
컴퓨터 시스템은 대개 네 가지 구성요소인, 하드웨어, 운영체제, 응용프로그램(application programs), 계산용 자원을 제공한다.
하드웨어는 중앙처리장치(CPU), 메모리 및 입출력(I/O) 장치로 구성되어, 기본 계산용 자원을 제공한다.응용프로그램인 워드 프로세서, 스프레드시트, 컴파일러, 그리고 웹브라우저 등은 사용자의 계산 문제를 해결하기 위해 이들 자원이 어떻게 사용될지를 정의한다. 운영체제는 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정한다.
운영체제는 컴퓨터 시스템이 동작할 때 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다. 운영체제는 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다. 운영체제의 역할을 좀 더 완전히 이해하기 위하여 사용자와 시스템 두 관점에서 살펴본다.

1.1.1 사용자 관점(User view)

많은 컴퓨터 사용자는 랩톱 혹은 모니터, 키보드, 마우스로 구성된 PC 앞에서 작업한다. 이러한 시스템은 사용자가 수행하는 작업을 최대화 하는 것이다. 이러한 경우 운영체제는 대부분 사용의 용이성을 위해 설계되고 성능에 약간 신경을 쓰고 다양한 하드웨어나 소프트웨어 자원이 어떻게 공유되는지냐의 자원의 이용에는 전혀 신경을 쓰지 않는다.
일부 컴퓨터는 사용자 관점이 존재하지 않거나 매우 작은 예도 있다. 예를 들면, 가전제품이나 자동차 내의 내장형 컴퓨터는 숫자 키패드를 가지고, 상태를 보이기 위해 표시등을 켜고 끌 수 있으나 이들 컴퓨터나 운영체제와 응용프로그램은 사용자의 개입 없이 작동하도록 설계되어 있다.

1.1.2 시스템 관점(System view)

컴퓨터의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다. 따라서 우리는 운영체제를 자원할당자(resource allcator)라고 볼 수 있다. 컴퓨터 시스템은 문제를 해결하기 위해 요구되는 여러 자원들(하드웨어와 소프트웨어)을 가진다. 운영체제는 이들 자원의 관리자로서 동작한다. 자원에 대해 서로 상충할 수 도 있는 많은 요청이 있으므로, 운영체제는 컴퓨터시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지 결정해야한다.
운영체제에 대한 다소 다른 관점(시스템관점을 말하는 듯) 여러가지 입출력 장치와 사용자 프로그램을 제어할 필요성을 강조한다. 운영체제는 제어프로그램이다. 제어 프로그램은 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어한다.(특히 입출력장치)

1.1.3 운영체제의 정의

운영체제는 유용한 컴퓨팅 시스템을 만드는 문제를 해결할 수 있는 합리적인 방법을 제공하기 위해 존재한다.
더욱 일반적인 정의와 우리가 지지하는 것은 운영체제가 컴퓨터에서 항상 실행되는 프로그램(커널)이다. 커널과 함께 두가지 다른 유형의 프로그램이 있다. 운영체제와 관련되어 있지만 반드시 커널의 일부일 필요는 없는 시스템 프로그램과 시스템 작동과 관련되지 않는 모든 프로그램을 포함하는 응용프로그램이다.
운영체제에는 항상 실행중인 커널, 응용프로그램 개발을 쉽게 하고 기능을 제공하는 미들웨어 프레임워크 및 시스템 실행중에 시스템을 관리하는데 도움이 되는 시스템 프로그램 등이 포함된다.

운영체제를 공부하는 이유

거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고 효율적이며 효과적이며 안전한 프로그래밍에 중요!

1.2 컴퓨터 시스템의 구성

현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 구성요소와 공유메모리 사이의 액세스를 제공하는 공통 버스(Bus)를 통해 연결 된 여러 장치 컨트롤러로 구성된다.

장치 컨트롤러는 일부 로컬 버퍼 저장소와 특수 목적 레지스터 집합을 유지 관리한다.
일반적으로 운영체제에는 각 장치 컨트롤러마다 장치 드라이버가 있다. 이 장치 드라이버는 장치 컨트롤러의 작동을 잘 알고 있고, 나머지 운영체제 장치에 대한 일관된 인터페이스를 제공한다. CPU와 장치 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁한다.

1.2.1 인터럽트 (Interrupts)

일반적인 컴퓨터 작업을 고려하자. 입출력 작업을 시작하기 위해 장치 드라이버는 장치 컨트롤러의 적절한 레지스터에 값을 적재한다. 그런 다음 장치 컨트롤러는 이러한 레지스터의 내용을 검사하여 수행할 작업을 결정한다. 컨트롤러는 장치에서 로컬 버퍼로 데이터 전송을 시작한다. 데이터 전송이 완료되면 장치 컨트롤러는 장치 드라이버에게 작업이 완료되었음을 알린다. 그런 다음 장치 드라이버는 읽기 요청이면 데이터 또는 데이터에 대한 포인터를 반환하며 운영체제의 다른 부분에 제어를 넘긴다. 컨트롤러는 장치드라이버에게 작업을 완료했다는 사실을 인터럽트를 통해 알린다.

하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다. 인터럽트는 다른 많은 목적으로도 사용되며 운영체제와 하드웨어 상호방식의 핵심부분이다.
CPU가 인터럽트되면, CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다. 이러한 고정된 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있다. 그리고 인터럽트 서비스 루틴이 시작된다. 인터럽트 서비스 루틴의 실행이 완료되면, CPU는 인터럽트 되었던 연산을 재개한다.

-출력을 수행하고 있는 단일 프로세스에 대한 인터럽트 시간 일정

인터럽트는 매우 빈번하게 발생하기 때문에 빠르게 처리되어야 한다. 따라서 인터럽트에 대한 포인터들의 테이블을 대신 이용할 수 있다. 이 경우 테이블을 통하여 간접적으로 인터럽트 루틴이 호출될 수 있다. 인터럽트가 요청되면, 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해 이 주소의 배열, 즉 인터럽트 벡터(서비스 루틴의 주소가 있는)가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 색인된다.
인터럽트 구조는 또한 인터럽트된 모든 정보를 저장해야 인터럽트를 처리한 후 이 정보를 복원할 수 있다. 만약 인터럽트 루틴이 처리기의 상태를 변경할 필요가 있다면, 인터럽트 루틴은 반드시 명시적으로 현재의 상태를 저장하여야 하며, 복귀하기 전에 상태를 복원해야한다. 인터럽트를 서비스 한 후, 인터럽트에 의해 중단되었던 연산이 인터럽트가 발생되지 않았던 것 처럼 다시 시작된다.
기본 인터럽트 메커니즘은 다음과 같이 작동한다. CPU는 컨트롤러가 인터럽트 요청 라인에 신호를 보낸 것을 감지하면, 인터럽트 번호를 읽고, 이 번호를 인터럽트 벡터의 인덱스로 사용하여 인터럽트 핸들러 루틴(Interrupt handler routine)으로 점프한다. 그런 다음 해당 인덱스와 관련된 주소에서 실행을 시작한다.

  • 인터럽트-구동 방식의 입출력 사이클

1.2.2 저장장치 구조

CPU는 메모리에서만 명령을 적재할 수 있으므로 실행하려면 프로그램을 먼저 메모리에 적재해야 한다. 범용 컴퓨터는 프로그램 대부분을 재기록 가능한 메인 메모리(random-access memory,RAM)에서 가져온다.
컴퓨터는 다른 형태의 메모리도 사용한다. 예를 들어, 컴퓨터 전원을 켤 때 가장 먼저 실행되는 프로그램은 부트스트랩 프로그램이며 운영체제를 적재한다. RAM은 휘발성이므로 부트스트랩 프로그램을 유지하는 용도로 살 수 없다. 대신, 읽기전용 메모리(EEPROM) 및 기 타형태의 펌웨어를 사용한다.
모든 형태의 메모리는 바이트의 배열을 제공한다. 각 바이트는 자신의 주소를 가지고 있다. CPU는 메인 메모리에서 레지스터로 한 바이트 또는 한 워드를 옮기거나 반대로 레지스터에서 메인 메모리로 옮긴다.
이상적으로는, 프로그램과 데이터가 메인 메모리에 영구히 존재하길 원한다. 하지만 메인 메모리는 모든 데이터를 저장하기엔 너무 작고, 휘발성이다. 따라서 보조저장장치가 존재한다. 보조저장장치는 대량의 데이터를 영구히 보존할 수 있다. 대표적으로 하드디스크드라이브(HDD)와 비휘발성메모리(NVM)장치가 있다.
대부분의 프로그램은 메모리에 적재될 때 까지 보조저장장치에 저장된다. 그런 후 많은 프로그램이 보조저장장치를 처리 소스 및 대상으로 모두 사용한다. 보조저장장치는 메인 메모리에 비해 훨씬 느리다. 저장장치 구성요소로는 이외에도 캐시메모리, CD-ROM, 자기테이프 등이 있다.

다양한 저장장치 시스템은 저장 용량 및 액세스 시간에 따라 계층구조로 구성될 수 있다. 일반적으로 크기와 속도 사이에는 상충하는 측면이 있어 메모리가 작고 빠를수록 CPU에 더 가깝다. 속도와 용량의 차이 외에도 휘발성 혹은 비휘발성이라는 차이가 있다.

  • 저장장치 계층구조
- 휘발성 저장장치는 단순히 메모리라고한다. 특정 유형의 저장장치를 강조해야하는 경우 명시적으로 표현한다.
- 비휘발성 저장장치는 전원이 꺼졌을 때 내용을 유지한다. 이를 NVS라 한다.
대부분의 경우 NVS는 보조저장장치를 가르킨다. 이 유형의 저장장치는 두 가지 유형으로 분리된다.
  • 기계적
    HDD, 광디스크,자기테이프 등
  • 전기적
    플래시메모리, FRAM, NRAM, SSD
    기계적 저장장치는 일반적으로 전기적 저장장치보다 용량이 크고 바이트당 비용이 저렴하다.

1.2.3 입출력구조(I/O Structure)

운영체제 코드의 상당부분은 I/O 관리에 할애된다. 인터럽트 구동 I/O의 형태는 소량의 데이터를 이동할 때는 좋지만 대량 데이터 이동에 사용될 때는 높은 오버헤드(?)를 유발할 수 있다. 이 문제를 해결하기 위해 직접 메모리 액세스(DMA)가 사용된다. 장치에 대한 버퍼 및 포인터, 입출력 카운트를 세팅한후 장치 제어기는 CPU의 개입 없이 메모리로부터 자신의 버퍼장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다. 한 바이트마다 인터럽트가 발생하는 것이 아니라 블록 전송이 완료될 때 마다 인터럽트가 발생한다. 장치 컨트롤러가 전송 작업을 수행하고있는 동안 CPU는 다른 작업을 수행할 수 있다.

  • 현대 컴퓨터의 작동방식

1.3 컴퓨터 시스템 구조

컴퓨터시스템은 사용된 범용 처리기의 수에 따라 분류 가능한 다양한 방식으로 구성될 수 있다.

1.3.1 단일 처리기 시스템(Single-Processor Systems)

코어는 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소이다. 단일 처리 코어를 가진 범용 CPU가 하나만 있는 경우 시스템은 단일 프로세서 시스템이다. 하나의 CPU에서 하나의 process만 처리가능하다.

1.3.2 다중 처리기 시스템(Multiprocessor Systems)

각각 단일코어 CPU가 있는 두개 이상의 프로세서가 있다. 프로세서는 컴퓨터 버스 및 때때로 클록, 메모리 및 주변장치를 공유한다. 다중처리기 시스템의 주요 장점은 처리량 증가이다.

1.4 운영체제의 작동

컴퓨터가 켜지면 부트스트랩 초기 프로그램이 실행된다.
부트스트랩은 시스템을 초기화하고, 운영체제 커널을 메모리에 적재한다.

1.4.1 다중 프로그래밍과 다중 태스킹

운영체제의 가장 중요한 측면 중 하나는 여러 프로그램을 실행할 수 있다는 것이다.
다중프로그래밍(multiprogmramming)은 CPU가 항상 한 개는 실행할 수 있도록(항상 바쁘도록) 프로그램을 구상하여 CPU 이용률을 높인다.
다중 프로그램 시스템에서 실행 중인 프로그램을 프로세스라고 한다.
운영체제는 여러 프로세스를 동시에 메모리에 유지한다. 운영체제는 이러한 프로세스 중 하나를 선택하여 실행하기 시작한다. 해당 프로세스가 대기해야 하는 경우 CPU는 다른 프로세스로 전환한다.

다음 그림처럼 여러 프로세스를 메모리에 배치해 두고 전환해가며 실행한다. 이를 통해 CPU를 계속 바쁘게 할 수 있다.

다중 태스킹(multitasking) 시스템에선 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 이것은 매우 빠르게 일어나기 때문에 사용자(인간)은 작업이 실행될 때에도 여러 작업과 상호작용 할 수 있다. 이것은 interactive computing을 발생시킨다.
동시에 여러 프로세스를 메모리에 유지하려면 메모리 관리 방식이 필요하다. 여러 프로세스가 동시에 실행할 준비가 되면 시스템은 CPU 스케줄링을 통해 다음에 실행될 프로세스를 선택한다.
다중 태스킹 시스템에선 가상 메모리(virtual memory)를 통해 적절한 응답시간을 보장한다.
가상 메모리는 실행에 필요한 일부만 메모리에 적재하고, 나머지는 디스크에 적재하여 실행하는 기법이다.

1.4.2 이중모드와 다중모드 운용

운영체제에는 사용자 모드와 커널모드(특권모드) 두 가지 실행 모드가 있다.
이 두 가지 모드를 통해 운영체제가 잘못 실행되지 않도록 방지한다.
모드비트라는 하나의 비트가 현재의 모드를 나타낸다. 이 비트는 커널모드(0) 또는 사용자 모드(1)을 나타낸다. 모드비트를 통해 운영체제를 위해 실행되는 작업과 사용자를 위해 실행되는 작업을 구분한다.
시스템을 부팅할 때 하드웨어는 커널모드에서 시작한다. 이후 운영체제가 적재되고, 사용자모드로 전환된다.
컴퓨터 시스템이 사용자를 위해 실행될 때는 사용자 모드에 있게 된다. 사용자의 작업이 운영체제로부터 시스템 콜을 통해 서비스를 요청하면 사용자 모드에서 커널모드로 전환해야 한다.
사용자 모드에서 사용자 프로세스가 시작되고, 트랩이나 인터럽트가 발생할 때마다 하드웨어는 사용자모드에서 커널모드로 전환한다. 즉, 운영체제가 컴퓨터의 제어를 얻을 때마다 항상 커널모드에 있게 된다.
시스템은 사용자 프로그램으로 제어를 넘기기 전에 항상 사용자 모드로 전환한다.

시스템콜은 사용자 프로그램이 자신을 대신하여 운영체제가 수행하도록 지정되어 있는 작업을 운영체제에 요청할 수 있는 방법을 제공한다. 시스템콜은 추후 자세히 설명한다.

참고자료
커널의 종류
모놀리틱 커널(monolithic kernel):모놀리틱 커널은 운영 체제의 모든 기능을 한 곳에 뭉쳐서 개발한다. 
장치 드라이버, 파일 시스템, 가상 메모리 등이 포함된다.

마이크로 커널(micro kernel):마이크로 커널은 꼭 필요한 기능만 커널에 구현하고, 
필수적이지 않은 기능들은 사용자 모드의 우선순위가 높은 애플리케이션 프로그램(유저 프로그램)으로 만든다.

Real-time OS:  Real-Time System은 컴퓨팅 시스템이 잘 돌아가는 지 판단하는 요소로 시간적 요소가 추가된다. 

1.4.3 타이머(Timer)

우리는 운영체제가 CPU에 대한 제어를 유지할 수 있도록 보장해야한다. 우리는 사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어가 운영체제로 복귀하지 않는 경우가 없도록 방지해야한다.
이를 위해 타이머를 설정하는데, 타이머는 지정된 시간 이후 컴퓨터를 인터럽트하도록 설정한다.

사용자에게 제어를 양도하기 전, 운영체제는 타이머가 인터럽트 할 수 있도록 설정되었는지 확인한다. 타이머가 인터럽트를 발생하면 제어는 자동으로 운영체제에 넘어간다.

1.5 자원관리(Resource Management)

앞에서 본 것처럼 운영체제는 자원관리자이다. 시스템의 CPU, 메모리 공간, 파일-저장공간 및 I/O장치는 운영체제가 관리해야 하는 자원에 속한다.

1.5.1 프로세스 관리(Process Management)

프로그램은 CPU에 의해 명령이 실행되지 않으면 아무것도 할 수 없다. 실행 중인 프로그램은 프로세스이다. 프로그램은 수동적 개체이고, 프로세스는 능동적 개체이다.
프로세스는 자기 일을 수행하기 위해 CPU시간, 메모리, 파일, I/O 장치를 포함한 여러 자원을 필요로 한다. 이러한 자원은 보통 실행되는 동안 할당된다.
이러한 물리적 자원 외에 여러 초기화 데이터(입력)도 아울러 전달될 수 있다.

CPU는 프로세스가 끝날 때까지 그 프로세스의 명령들을 차례대로, 하나씩 수행한다.
단일 스레드 프로세스는 다음 실행할 명령의 위치를 알려주는 하나의프로그램 카운터를 가지고 있다.
다중 스레드 프로세스는 스레드 하나마다 하나의 프로그램 카운터를, 즉 여러개의 프로그램 카운터를 가지고 있다.

1.5.2 메모리 관리(memory management)

메인 메모리는 CPU와 입출력 장치에 의해 공유되는, 빠른 접근이 가능한 데이터의 저장소이다.
CPU는 메모리에서 명령어를 읽고, 데이터를 읽을 수 있다.

메모리 관리는 언제 어떤 것이 메모리에 있을지를 결정한다. 이는 사용자에 대한 컴퓨터의 응답속도와 CPU 이용률을 개선할 수 있다.

운영체제는 메모리 관리와 관련하여 다음과 같은 일을 담당해야 한다.

  • 메모리의 어느 부분이 현재 사용되고 있으며 어느 프로세스에 의해 사용되고 있는지를 추적해야한다.
  • 필요에 따라 메모리 공간을 할당하고 회수해야 한다.
  • 어떤 프로세스(또는 그 일부)들을 메모리에 적재하고 제거할 것인가를 결정해야 한다.

1.5.3 파일 시스템 관리(File-System Management)

컴퓨터 시스템의 편리한 사용을 위해, 운영체제는 정보 저장장치에 대한 균일한 논리적 관점을 제공한다. 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장단위인 파일을 저장한다.
컴퓨터는 여러 유형의 물리적 매체에 정보를 저장할 수 있다. 이러한 각 매체는 자신의 특성과 물리적 구성을 가지고 있다. 대부분의 매체는 디스크 드라이브와 같은 장치에 의해 제어되며, 이들 장치 또한 자신의 독특한 특성이 있다.

일반적으로 파일은 프로그램과 데이터를 나타낸다. 운영체제는 대량 저장 매체와 그것을 제어하는 장치를 관리함으로써 파일의 추상적인 개념을 구현한다. 또한, 파일은 사용하기 쉽도록 통상 디렉토리 들로 구성된다.
다수의 사용자가 파일에 접근하려고 할 때는 누구에 의해서, 그리고 어떤 방법으로 파일이 접근되어야 하는가를 통제하는 것이 바람직하다.

운영체제는 파일 관리를 위하여 다음과 같은 일을 담당한다.

  • 파일의 생성 및 제거
  • 디렉터리 생성 및 제거
  • 파일과 디렉터리를 조작하기 위한 프리미티브의 제공
  • 파일을 보조저장장치로 매핑
  • 안정적인(비휘발성) 저장 매체에 파일을 백업

1.5.4 대용량 저장장치 관리(Mass-Storage Management)

앞에서 본 것처럼 컴퓨터 시스템은 메인 메모리를 백업하기 위해 보조저장장치를 제공해야 한다.
프로그램은 대부분은 메모리에 적재될때 까지 이러한 장치에 저장된다.

운영체제는 보조저장장치 관리와 관련하여 다음 활동을 담당한다.

  • 마운팅과 언마운팅
  • 사용 가능 공간의 관리
  • 저장장소 할당
  • 디스크 스케줄링
  • 저장장치 분할
  • 보호

1.5.5 캐시 관리 (Cache Management)

캐싱은 컴퓨터 시스템의 중요한 원리이다. 정보는 통상 어떤 저장창치(메인 메모리, 하드 디스크)에 보관된다. 정보가 사용됨에 따라, 더 빠른 장치인 캐시에 일시적으로 복사된다.

그러므로 우리가 특정 정보가 필요할 경우, 우리는 먼저 캐시에 그 정보가 있는지를 조사해보아야 한다. 만약 캐시에 있으면, 우리는 그 정보를 캐시로부터 직접 사용하지만, 만일 캐시에 없다면 메인 메모리 시스템으로부터 그 정보를 가져와서 사용해야 하며, 이 때 이 정보가 다음에 곧 다시 사용될 확률이 높다는 가정하에 캐시에 넣는다.

CPU 내부의 프로그램 가능한 레지스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있다.

캐시 크기가 제한되어 있으므로 캐시 관리는 중요한 설계 문제이다. 캐시 크기와 캐시 교체 정책을 신중하게 선택하면 성능이 크게 향상될 수 있다.

메모리의 계층 구조에서, 동일한 데이터가 서로 다른 수준의 저장장치 시스템에 나타나게 된다. A라는 변수를 사용할 때, A가 자기 디스크에 있다면, 이를 메인 메모리에 복사하고, 다시 캐시로 복사하고, 그 후 하드웨어 레지스터로 복사한다. 이 때 A의 복사본이 여러 곳에 존재하게 된다.
내부 레지스터에서 A의 변화가 일어나면, 여러 저장장치 시스템에서 A의 값이 달라진다.

다중 태스킹 환경에서 여러 개의 프로세스가 A에 접근하길 원하는 경우, 이들 각 프로세스가 가장 최근에 갱신된 A의 값을 얻을 것을 보장하기 위한 극도의 주의가 필요하다.

다중 처리기(multi processor) 환경 하에서는 상황이 더욱 복잡해진다. 이런 환경에서는 A의 복사본이 동시에 여러 캐시에 존재할 수 있다. 한 캐시에 있는 A의 값이 갱신된 경우, A가 존재하는 모든 캐시에 즉각적으로 반영되어야 한다. 이러한 상황을 캐시 일관성 문제라고 한다.

1.5.6 입출력 시스템 관리 (I/O Systems Management)

운영체제의 목적 중의 하나는 사용자에게 특정 하드웨어 장치의 특성을 숨기는 것이다.
입출력 시스템은 다음과 같이 구성되어 있다.

  • 버퍼링(데이터가 옮겨지는 동안 일시적으로 저장), 캐싱(더 빠른 저장공간에 데이터의 일부를 저장), 스풀링(한 작업의 출력과 다른 작업의 입력이 겹치는 경우)을 포함한 메모리 관리 구성요소

1.6 보안과 보호(Security and Protection)

만일 컴퓨터 시스템이 다수의 사용자를 가지며 다수 프로세스의 병행 수행을 허용한다면, 데이터에 대한 접근은 반드시 규제되어야 한다. 이를 위해 컴퓨터의 자원들에 대해 운영체제로부터 적절한 허가를 획득한 프로세스 만이 작업할 수 있도록 보장하는 기법이 필요하다.
보호란 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 또는 사용자들의 접근을 제어하는 기법이다.
컴퓨터 시스템은 충분한 보호 기능이 있더라도 여전히 고장이 나거나 부적절한 접근을 허용할 수 있다.(인증 정보가 도난당했을 경우가 있음) 이러한 외부 또는 내부의 공격을 방어하는 것이 보안기능이다. 이러한 공격은 시스템의 많은 범위에 대해 가능하고 바이러스, 웜, 서비스 거부 공격, 식별자 도용, 서비스 도용 등이 있다.

보호와 보안을 제공하기 위해서는 시스템의 모든 사용자를 구분할 수 있어야 한다. 시스템은 먼저 사용자를 구분하고, 누가 어떤 것을 할 수 있을지를 결정한다.
운영체제의 대부분은 사용자 이름과 연관된 사용자 식별자(user IDs)의 리스트를 유지한다. 이 사용자 식별자는 사용자의 모든 프로세스나 스레드에 연관된다.
각 사용자가 아니라 사용자의 집합을 구분하기 원할 때는 그룹 기능을 사용할 수 있다. 그룹 기능은 시스템 전체에 존재하는 그룹 이름과 그룹 식별자의 리스트로 구현될 수 있다. 그룹 식별자 역시 관련된 모든 프로세스나 스레드에 연관된다.
사용자는 때로 원하는 작업을 수행하기 위해서는 권한을 상승해야 할 때가 있다. 예를 들어 사용자가 제한된 장치에 접근해야 할 때도 있다. 운영체제는 권한 상승을 허용하는 다양한 방법을 제공한다. 프로그램이 수행될 때 현 사용자의 식별자(ID)가 아니라 접근하려고 하는 파일의 소유주 식별자를 이용하여 동작할 수 있다. 프로세스는 종료되거나 특권을 해제하기 전까지 이 유효 사용자 식별자(effective user ID)를 이용하여 수행된다.

1.7 가상화(Virtualization)

가상화는 단일 컴퓨터의 하드웨어를 여러가지 실행 환경으로 추상화하여 개발환경이 자신만의 컴퓨터에서 실행되고 있다는 환상을 만들 수 있는 기술이다.
가상화는 운영체제가 다른 운영체제 내에서 하나의 응용처럼 수행될 수 있게 한다.

0개의 댓글