8 분 소요

본 글은 Operating System Concepts 10th (운영체제) 책을 보며 내용을 개인 공부에 목적으로 정리했습니다.
이전에 운영체제 관련 강의들을 들으면서 정리한 시리즈 글들이 있는데,
지식을 습득하는 데 있어 가장 느리지만 가장 빠른 방법이 원본책을 자세히 보는 것이라 생각됩니다.
책 내용들을 최대한 이해하기 위해 거의 모든 내용을 담고 있습니다.

책 pdf 링크 : Operating System Concepts 10th Edition by Abraham Silberschatz Peter B Galvin Greg Gagne pdf free download
연습 문제 정답지 : Solutions of Practice Exercises, Tenth Edition of Operating System Concepts, AVI SILBERSCHATZ



1.4 Operating-System Operations

  • 운영체제는 프로그램이 실행되는 환경을 제공한다.
  • 컴퓨터를 실행하려면 부트스트랩 프로그램을 실행해야 한다.
    • 일반적으로 컴퓨터 하드웨어 내에 펌웨어로 저장된다.
    • CPU 레지스터에서 장치 컨트롤러, 메모리 내용에 이르기까지 시스템의 모든 측면을 초기화한다.
  • 부트스트랩 프로그램은 운영체제 커널을 찾아 메모리에 적재해야 한다.
  • 커널이 적재되어 실행되면 시스템과 사용자에게 서비스를 제공할 수 있다.
  • 이 단계가 완료되면 시스템이 완전히 부팅되고 시스템은 어떤 이벤트가 발생할 때까지 기다린다.
  • 이벤트는 인터럽트를 발생시켜 신호를 보낸다.
    • 트랩(trap or exception) : 오류 또는 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트
    • 이 특정 요청은 시스템 콜(system call)이라는 특수 연산을 실행하여 요청되고 운영체제가 제공하는 서비스가 수행될 것을 요구한다.
    • 시스템 콜(system call) : 시스템 콜은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 1


1.4.1 multiprogramming and multitasking

  • 용어 정리
    • 프로세스(process) : 실제 메모리에 적재되어 프로세서에 의해 실행되고 있는 프로그램
    • 멀티 프로그래밍(multi programming) : 하나의 프로세서가 하나의 프로세스를 수행하는 동안 다른 프로세스에 접근할 수 있도록 하는 방법 2
    • 태스크(task) : 작업 단위의 실행 단위 (프로세스, 스레드…) 3
    • 멀티태스킹(multi-tasking) : 다수의 태스크를 운영체제의 스케줄링에 의해 번갈아 가며 수행되도록 해주는 것을 의미한다. 2
  • 운영체제는 여러 프로세스를 동시에 메모리에 유지한다.
  • 운영체제는 이러한 프로세스 중 하나를 선택하여 실행하기 시작한다.

image

  • 멀티 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자 만족도를 높인다.
  • 멀티프로그래밍 시스템에서 운영체제는 다른 프로세스로 전환하여 실행한다.
  • 해당 프로세스가 대기해야 하는 경우 CPU는 다른 프로세스로 전환한다.
  • 첫번째 프로세스는 대기를 마치고 CPU를 다시 돌려받는다.
  • 즉, 하나 이상의 프로세스를 실행해야 하는 한 CPU는 유후 상태가 아니다.
  • 멀티 태스킹은 멀티 프로그래밍의 논리적 확장이다.
  • 멀티 태스킹 시스템에서 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공한다.
  • 멀티 태스킹 시스템에서 운영체제는 적절한 응답 시간(response time)을 고려해야 한다.
  • 이에 가상 메모리(virtual memory)가 있는데, 일부만 메모리에 적재된 프로세스의 실행을 허용하는 기법이다.
    • 이점은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것이다.
    • 그리고 가상 메모리는 메인 메모리를 크고 균등한 저장장치의 배열로 추상화하여 사용자에게 보이는 논리 메모리를 물리 메모리부터 분리시킨다.


1.4.2 Dual-Mode and Multimode Operation

  • 시스템을 올바르게 실행하려면 운영체제 코드 실행과 사용자-정의 코드 실행을 구분할 수 있어야 한다.
  • 대부분의 컴퓨터 시스템이 취하는 접근 방식은 다양한 실행 모드를 차별화 할 수 있는 하드웨어 지원을 제공하는 것이다.
  • 적어도 두 개의 독립된 연산 모드, 즉 사용자 모드(user mode)와 커널 모드(kernel mode)를 필요로 한다.
    • 커널 모드는 특권 모드(privileged mode)로도 불린다.
  • 모드 비트(mode bit)라고 하는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되었다.
    • 이 비트는 커널 모드(0) 또는 사용자 모드(1)을 나타낸다.

image

  • 시스템 부트 시, 하드웨어는 커널 모드에서 시작한다. 이어 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다.
  • 트랩이나 인터럽트가 발생할 때마다 하드웨어는 사용자 모드에서 커널 모드로 전환한다.


  • 동작의 듀얼모드는 잘못된 사용자로부터 운영체제를, 그리고 잘못된 사용자 서로를 보호하는 방법을 우리에게 제공한다.
  • 사용자는 악영향을 끼칠 수 있는 일부 명령을 특권 명령으로 지정함으로써 이러한 보호를 달성한다.
  • 하드웨어는 특권 명령이 커널 모드에서만 수행되도록 허용한다.
  • 사용자 모드에서 특권 명령을 수행하려고 시도하면, 하드웨어는 이를 실행하지 않고, 불법적인 명령으로 간주해 운영체제로 트랩을 건다.
  • 가상화를 지원하는 CPU는 VMM(virtual machine manager)이 시스템을 제어하는 시점을 표시하기 위한 별도의 모드를 가진다.
    • 이 모드에서 VMM은 사용자 프로세스보다 많은 권한을 가지지만 커널보다는 적은 권한을 가진다.
    • 가상 머신을 생성 및 관리할 수 있으려면 이 레벨의 권한이 필요하고 CPU 상태를 변경하여 해당 작업을 할 수 있다.


  • 시스템 콜은 사용자 프로그램이 자신을 대신하여 운영체제가 수행하도록 지정되어 있는 작업을 운영체제에 요청할 수 있는 방법을 제공한다.
  • 시스템 콜이 수행될 때, 시스템 콜은 하드웨어에 의해 하나의 소프트웨어 인터럽트로 취급된다.
  • 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달되고, 모든 비트가 커널 모드로 설정된다.
  • 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 콜이 발생했는지를 결정한다.


1.4.3 Timer

  • 사용자는 사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어(control)가 운영체제로 복귀하지 않는 경우가 없도록 반드시 방지해야 한다.
  • 이러한 목적을 달성하기 위해, 타이머(timer)를 사용할 수 있다.
  • 사용자에게 제어를 양도하기 전에, 운영체제는 타이머가 인터럽트를 할 수 있도록 설정되었는지를 확인한다.
  • 만약 타이머가 인터럽트를 발생하면 제어는 자동으로 운영체제에 넘어가며, 운영체제는 인터럽트를 치명적인 오류로 취급하거나, 프로그램에게 더 많은 시간을 줄 수 있다.



1.5 Resource Management

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


1.5.1 Process Management

  • 프로세스는 자기 일을 수행하기 위해 CPU 시간, 메모리, 파일, 그리고 입출력 장치를 포함한 여러 가지 자원을 필요로 한다.
    • 이러한 자원은 보통 실행되는 동안 할당된다.
    • 하나의 프로그램은 디스크에 저장된 파일의 내용고 같이 수동적(passive) 개체지만 프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터(program counter)를 가진 능동적(active)인 개체이다.
  • CPU는 그 프로세스가 끝날 때까지 그 프로세스의 명령들을 차례대로 수행한다.


1.5.2 Memory Management

  • 메인 메모리(main memory)는 CPU와 입출력 장치에 의하여 공유되는, 빠른 접근이 가능한 데이터의 저장소이다.
    • 메모리는 크기가 수십 만에서 수십 억까지의 범위를 갖는 바이트의 대용량 배열이다.
    • 각 바이트는 자신의 주소를 가진다.
  • 또한 메인 메모리는 일반적으로 CPU가 직접 주소를 지정할 수 있고, 그리고 직접 접근할 수 있는 유일한 대량 메모리이다.
  • 프로그램이 수행되기 위해서는 반드시 절대 주소로 매핑(mapping)되고 메모리에 적재되어야 한다.
  • 프로그램을 수행하면서, 이러한 절대 주소를 생성하여 메모리의 프로그램 명령어와 데이터에 접근한다.


1.5.3 File-System Management

  • 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다.
    • 파일(file) : 파일 생성자에 의해 정의된 관련 정보의 집합체
  • 운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 파일에 접근한다.
  • 운영체제는 파일 관리를 위해 다음과 같은 일을 담당한다.
    • 파일의 생성 및 제거
    • 디렉토리 생성 및 제거
    • 파일과 디렉토리를 조작하기 위한 primitive 제공
    • 파일을 보조저장장치로 매핑
    • 안정적인(비휘발성) 저장 매체에 파일을 백업


1.5.4 Mass-Storage Management

  • 컴퓨터 시스템은 메인 메모리를 백업하기 위해 보조저장장치를 제공해야 한다.
  • 운영체제는 보조저장장치 관리와 관련하여 다음 활동을 담당한다.
    • 마운팅과 언마운팅
    • 사용 가능 공간의 관리
    • 저장장소 할당
    • 디스크 스케줄링
    • 저장장치 분할
    • 보호


1.5.5 Cache Management

  • 정보는 어떤 저장장치(ex. 메인메모리)에 보관된다.
  • 정보가 사용됨에 따라, 더 빠른 장치인 캐시에 일시적으로 복사된다.
  • 그러므로, 우리가 특정 정보가 필요할 경우, 먼저 캐시에 그 정보가 있는지를 조사해 본다.
  • 만약 캐시에 있으면 우리는 그 정보를 캐시로부터 직접 사용하지만, 만일 캐시에 없다면 메인 메모리 시스템으로부터 그 정보를 가져와서 사용해야 하며, 이 때 이 정보가 다음에 곧 사용될 확률이 높다는 가정하에 캐시에 넣는다.
  • CPU 내부의 프로그램 가능한 레시스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있다.
  • 컴파일러는 어느 정보를 메인 메모리에 두고, 어느 정보를 레지스터에 둘 것인지를 결정하는 레지스터 할당 정책과 교체 알고리즘을 구현한다.
  • 캐시로부터 CPU 및 레지스터로의 데이터 전송은 운영체제의 간섭 없이 하드웨어적으로 이루어진다.
  • 디스크와 메모리 간의 데이터 전송은 운영체제에 의해 제어된다.

image

캐시(cache)는 레지스터 다음으로 CPU 코어 가까이에 위치해 있지만, 프로그램에서 직접 읽거나 쓸 수 없고, 하드웨어 메모리 관리 시스템에서 내부적으로 제어한다. 데이터 지역성(locality)을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고 CPU가 상대적으로 접근 시간이 느린 메인 메모리 대신 캐시 메모리에 우선적으로 접근하게 하면 성능 향상을 기대할 수 있다. 4


  • 메모리의 계층 구조에서, 동일한 데이터가 서로 다른 수준의 저장장치 시스템에 나타나게 된다.
  • 그림과 같이 A의 복사본이 여러 곳에 존재하게 되는데, 내부 레지스터에서 변형이 일어나면, A의 값은 여러 저장장치 시스템에서 서로 달라진다.
  • A의 값은 자기 디스크에 새로운 A의 값이 다시 기록된 이후에야 비로소 같아진다.

image


1.5.6 I/O Systems Management

  • 입출력 시스템은 1) 일반적인 장치 드라이버 인터페이스, 2) 특정 하드웨어 장치들을 위한 드라이버 같이 구성되어 있다.



1.6 Security and Protection

  • 만일 컴퓨터 시스템이 다수의 사용자를 가지며 다수 프로세스의 동시 수행을 허용한다면, 데이터에 대한 접근은 반드시 규제되어야 한다.
  • 이를 위해 파일, 메모리 세그먼트, CPU 및 다른 자원들에 대해 운영체제로부터 적절한 허가를 획득한 프로세스만이 작업할 수 있도록 보장하는 기법이 필요하다.
  • 보호는 구성요소 서브시스템 간의 인터페이스에서 잠재적인 오류를 검출함으로써 시스템의 신뢰성을 증가시킬 수 있다.
    • 보호(protection) : 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 또는 사용자들의 접근을 제어하는 기법



1.7 Virtualization

  • 가상화는 특정 CPU를 위해 컴파일된 운영체제가 동일 CPU용의 다른 운영체제 내에서 수행된다.
    • 가상화(virtualization) : 단일 컴퓨터(CPU, 메모리, 디스크 드라이브, 네트워크 인터페이스 카드 등)의 하드웨어를 여러 가지 실행 환경으로 추상화하여 개별 환경이 자신만의 컴퓨터에서 실행되고 있다는 illusion을 만들 수 있는 기술
    • 가상 머신(virtual machine)의 사용자는 단일 운영체제에서 동시에 실행되는 다양한 프로세스 간에 전환할 수 있는 것과 동일한 방식으로 다양한 운영체제 간에 전환할 수 있다.
    • 컴파일(compile) : 인간이 이해할 수 있는 언어로 작성된 소스 코드를 CPU가 이해할 수 있는 언어로 번역(변환)하는 작업 5
  • Windows는 호스트(host) 운영체제이고 VMware 응용은 가상 머신 관리자(virtual machine manager; VMM)이다.
    • VMM은 게스트 운영체제를 수행하고 그들의 자원 이용을 관리하며 각 게스트를 서로로부터 보호한다.

image



1.8 Distributed Systems

  • 분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있다.
    • 분산 시스템(distributed systems)은 물리적으로 떨어져 있는 이기종(heterogeneous) 컴퓨터들의 집합이다.
  • 분산 시스템의 많은 기능은 네트워킹에 의존하고 있다.
    • 네트워크(network) : 두 개 이상 시스템 간의 통신 경로
    • 네트워크는 사용되는 프로토콜, 노드 간의 거리, 그리고 전송 매체에 따라 다르다.
    • TCP/IP가 가장 일반적인 네트워크 프로토콜로 인터넷의 기본 구조를 제공한다.
    • TCP/IP(Transmission Control Protocol/Internet Protocol) : 컴퓨터 사이의 통신 표준 및 네트워크의 라우팅 및 상호연결에 대한 자세한 규칙을 지정하는 프로토콜 스위트 6
  • 네트워크는 노드 간의 거리에 의해 유형이 결정된다. 근거리 통신망(LAN; local area network), 광역 통신망(WAN; wide area network), 도시권 통신망(MAN; metropolitan area network), 단거리 통신망(PAN; personal area network) 등이 있다.



1.9 Kernel Data Structures

  • 이번 챕터에서는 시스템에서 데이터가 구조화되는 방법을 다룬다.

1.9.1 Lists, Stacks, and Queues

  • 배열(array)은 직접 접근될 수 있는 단순한 자료 구조이다.
  • 배열의 각 항은 직접 접근할 수 있으나 리스트의 항들은 특성 순서로 접근해야 한다.
  • 리스트(list)는 데이터 값들의 집단을 하나의 시퀀스로 표시한다.
  • 이 구조를 구현하는 가장 일반적인 방법이 연결 리스트(linked list)이다.
    • 연결 리스트에서는 각 항이 다른 하나에 연결되어 있다.
  • 연결 리스트
  • Pros
    • 가변 수의 항들을 수용하며 항의 삭제와 삽입이 쉽다.
  • Cons
    • 길이가 n인 리스트에서 특정 항을 인출할 때의 성능이 선형, 즉 O(n)이라는 점이다.

image

  • 단일 연결 리스트(singly linked list)에서는 각 항은 후속항을 가리킨다. (Figure 1.17)

image

  • 이중 연결 리스트(doubly linked list)에서는 한 항은 자신의 앞 항이나 뒤 항을 가리킨다. (Figure 1.18)

image

  • 원형 연결 리스트(circularly linked list)에서는 리스트의 마지막 항이 널(null)이 아니라 첫 항을 가리킨다. (Figure 1.19)


  • 스택(stack)은 순차적 순서를 가진 자료구조로 항을 넣거나 거내는 데 LIFO(last in first out)을 사용한다.
    • 스택에 마지막에 삽입된 항이 먼저 인출된다.
    • 스택에 항을 삽입하거나 인출하는 일을 푸쉬(push)또는 팝(pop)이라 부른다.
  • 큐(queue)는 순차 순서의 자료구조로 FIFO(first in first out)을 사용한다.
    • 각 항은 삽입된 순서대로 큐로부터 제거된다.


1.9.2 Trees

  • 트리(tree)는 데이터의 서열을 표시하는 데 사용 가능한 자료구조이다.
  • 트리 구조에서 데이터 값들은 부모-자식 관계로 연결된다.
  • 일반 트리(general tree)에서 부모는 임의의 수의 자식을 가질 수 있지만, 이진 트리(binary tree)에서 부모는 최대 두 개의 자식을 가질 수 있다.
  • 이진 트리 탐색(binary search tree)는 추가로 부모의 두 자식 사이에 좌측 자식 <= 우측 자식의 순서를 요구한다.

    image


1.9.3 Hash Functions and Maps

  • 해시 함수(hash function)는 데이터를 입력으로 받아 이 데이터에 산술 연산을 수행하여 하나의 수를 반환한다.
    • 이 수는 그 데이터를 인출하기 위해 테이블의 인덱스로 사용할 수 있다.
  • 해시 맵(hash map)은 해시 함수를 사용하여 [키:값]을 연관(map)시킨다.
    • 일단 매핑이 성립되면 키에 해시 함수를 적용하여 해시맵으로부터 그 값을 얻을 수 있다.

image


1.9.4 Bitmaps

  • 비트맵(bitmap)은 n개의 항의 상태를 나타내는 데 사용 가능한 n개의 이진 비트의 스트링이다.
  • 예를 들어 다수의 지원이 있으면, 각 자원의 가용 여부를 이진 비트의 값으로 표시한다.
    • 0은 자원이 사용 가능함을 표시하고, 1은 사용 불가능함을 표시한다.



1.10 Computing Environments

1.10.1 Traditional Computing

  • 네트워크 컴퓨터(network computer)는 실질적으로 웹 기반 컴퓨팅을 이해하는 터미널을 말하며, 이들은 더 높은 보안이나 쉬운 보수가 필요한 경우 전통적 워크스테이션을 대체하여 사용되고 있다.
  • 일부 홈은 홈 계산 환경을 보안 침해로부터 보호하기 위해 방화벽(firewall)을 가지고 있다.
    • 방화벽은 네트워크의 장치간 통신을 제한한다.


1.10.2 Mobile Computing

  • 모바일 컴퓨팅(mobile computing)은 휴대용 스마트폰과 태블릿 컴퓨터의 컴퓨팅 환경을 말한다.
    • 이들 장치들은 이동이 가능하고 가볍다는 구별되는 물리적 특징을 공유한다.


1.10.3 Client-Server Computing

  • 현대 네트워크 구조는 서버 시스템(server systems)이 클라이언트 시스템(client systems)이 생성한 요청을 만족시키는 배치를 특징으로 한다.

image

  • 서버 시스템은 계산 서버(compute-server)와 파일 서버(file-server)로 분류될 수 있다.
    • 계산 서버(compute-server) 시스템은 클라이언트가 어떤 작업을 요청을 보낼 수 있는 인터페이스를 제공한다. 그 결과로 서버는 그 작업을 수행하고 결과를 클라이언트에게 돌려보낸다.
    • 파일 서버(file-server) 시스템은 클라이언트가 파일을 생성(create), 갱신(update), 읽기(read) 및 제거(delete)할 수 있는 파일 시스템 인터페이스를 제공한다. 웹 서버가 그 예이다.


1.10.4 Peer-to-Peer Computing

image

  • P2P(peer-to-peer) 시스템에서는 클라이언트와 서버가 서로 구별되지 않는다. 대신 시스템상의 모든 노드가 피어로 간주되고 각 피어는 서비스를 요청하느냐 제공하느냐에 따라 클라이언트 및 서버로 동작한다.
  • 클라이언트 서버 시스템에서는 서버가 병목으로 작용하지만 피어 간 시스템에서는 서비스가 네트워크에 분산된 여러 노드에 의해 제공될 수 있다.
  • 피어 간 시스템에 참여하기 위해서는 노드는 먼저 P2P 네트워크에 참가해야 한다.
  • 네트워크에 참가하게 되면 네트워크의 다른 노드에게 서비스를 제공하거나 서비스를 요청할 수 있다.
  • 다음은 어떤 서비스가 가능한지를 결정하는 방법이다.
    • 노드가 네트워크에 참가할 때 네트워크의 중앙 검색 서비스에 자신이 제공하는 서비스를 등록한다.
    • 특정 서비스를 원하는 노드는 먼저 이 중앙 검색 서비스를 통하여 어떤 노드가 서비스를 제공하는지를 확인하여야 한다.
    • 나머지 통신은 클라이언트와 서비스 제공자 사이에서만 발생하게 된다.


1.10.5 Cloud Computing

image

  • 클라우드 컴퓨팅(cloud computing)은 계산, 저장장치는 물론 응용 조차도 네트워크를 통한 서비스로 제공하는 컴퓨팅 유형이다.
  • 어떤 면에서 클라우드 컴퓨팅은 가상화를 그 기능의 기반으로 사용하기 때문에 가상화의 논리적 확장이다.
  • 관련 용어들을 정리하면 다음과 같다.
    • public cloud : 서비스를 위해 지불 가능한 사람은 누구나 인터넷을 통해 사용 가능한 클라우드
    • private cloud : 한 회사가 사용하기 위해 운영하는 클라우드
    • hybrid cloud : public과 private 부분을 모두 포함하는 클라우드
    • (SaaS)software as a service : 인터넷을 통해 사용 가능한 하나 이상의 애플리케이션(ex. 워드 프로세서나 스프레트시트)
    • (PaaS) platform as a service : 인터넷을 통해 사용하도록 애플리케이션에 맞게 준비된 소프트웨어 스택(ex. 데이터베이스 서버)
    • (IaaS) infrastructure as a service : 인터넷을 통해 사용 가능한 서버나 저장장치(ex. 생산 데이터의 백업 복사본을 만들기 위한 저장장치)


1.10.6 Real-Time Embedded Systems

  • 이 장치는 아주 특정한 작업만을 수행하는 경향이 있다.
  • 이 장치들이 수행되는 시스템은 매우 원시적이며, 운영체제도 제한된 기능만을 제공한다.
  • 임베디드 시스템은 거의 언제나 실시간 운영체제를 수행한다.
    • 실시간 시스템은 프로세서의 작동이나 데이터의 흐름에 엄격한 시간 제약이 있을 때 사용된다.
    • 따라서, 실시간 시스템은 종종 전용 애플리케이션에서 제어 장치로 사용된다.





References

댓글남기기