운영체제(공룡책)을 읽고 정리한 글입니다.
운영체제란?
컴퓨터 하드웨어를 관리하는 소프트웨어이다.
또한 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다.
운영체제는 IOT를 포함하는 자동차와 스마트홈 기기에서 스마트폰, PC, 클라우드 컴퓨팅 환경까지 어느 곳에나 존재한다.
전체 컴퓨터 시스템은 크게 위 사진처럼 분류할 수 있다.
하드웨어, 운영체제, 응용 프로그램 및 사용자.
운영체제의 역할은 사용자와 시스템 두 관점에 따라 나뉠 수 있다.
사용자 관점
사용자는 일반적으로 노트북, 모니터, 키보드, 마우드 등으로 구성된 PC 앞에서 작업한다.
이러한 시스템은 한 사용자가 자원을 독점하도록 설계되었으며, 시스템의 목표는 사용자가 수행하는 작업의 효율을 최대화 하는 것이다.
따라서 이런 환경에서 운영체제는 사용의 용이성을 위해 설계되고 성능에 약간 신경을 쓰지만, 다양한 하드웨어와 소프트웨어 자원이 어떻게 공유되는 등의 자원의 이용에는 전혀 신경을 쓰지 않는다.
시스템 관점
컴퓨터의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다.
따라서 이 관점에서는 운영체제를 자원 할당자로 볼 수 있다.
컴퓨터 시스템은 CPU 클록, 메모리 공간, 저장장치 공간, 입출력 장치 등을 가지는데, 운영체제는 이들이 사용하는 자원의 관리자로서 동작한다. 자원에 대한 많은 요청이 있을 것이고, 이러한 요청이 서로 충돌을 일으킬 수 있기 때문에 운영체제는 컴퓨터 시스템을 효율적으로 운영하기 위해서 어느 요청에 자원을 할당해줄 지 결정해야한다.
따라서 운영체제의 역할은 사용자가 다양한 하드웨어를 쉽고 빠르게 사용할 수 있도록 도와주고, 하드웨어를 사용하기 위한 자원을 동적으로 할당해주는 역할이라고 정리할 수 있겠다.
컴퓨터 시스템 구조
CPU : 명령을 실행하는 하드웨어
프로세서 : 하나 이상의 CPU를 포함하는 물리적 칩
코어 : CPU의 기본 계산 단위
다중 코어 : 동일한 CPU에 여러 컴퓨팅 코어를 포함
다중 처리기 : 여러 프로세서를 포함함
1. 단일 처리기 시스템
코어는 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소이다.
단일 처리 코어를 가진 범용 CPU가 하나만 있는 경우 시스템은 단일 프로세서 시스템이다.
현대에 거의 없는 구조
2. 다중 처리기 시스템
이 시스템에는 각각 단일 코어 CPU가 있는 두개 이상의 프로세서가 있다.
프로세서는 버스, (때때로) 클록, 메모리 및 주변 장치를 공유한다.
장점으로는 프로세서가 증가함에 따라 증가하는 처리량이다.
하지만 처리량의 증가 비율은 선형적이지 않다.
왜냐하면 여러 프로세서가 작업할 때 프로세서 간의 협업에 따른 오버헤드와 공유 자원에 대한 경합 때문이다.
SMP(대칭형 다중 처리 구조)
CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 수행하는 SMP가 가장 일반적인 다중 처리기 시스템이다.
각 프로세서에는 로컬 레지스터와 캐시, CPU가 있다. 하지만 하나의 물리 메모리를 공유하게된다.
이 방식의 장점은 많은 프로세스를 동시에 실행할 수 있다는 점이다.
하지만 하나의 처리기에 많은 프로세스의 실행이 몰릴 수 있어서 자원을 비효율적으로 사용하게 될 수 있다는점이 단점이 된다.
이중 코어 설계
여러 개의 컴퓨팅 코어가 단일 칩에 상주하는 다중 코어 시스템을 나타낸다.
칩 내 통신이 칩 간 통신보다 빠르므로 다중 코어 시스템은 단일 코어를 가지는 여러 칩의 묶음보다 효율적일 수 있다. 그리고 다중 코어 시스템이 훨씬 적은 전력을 소모한다. (모바일 환경에서 중요한 요소)
코어간의 데이터 공유는 L2 Cache를 통해 이루어 진다.
대부분의 아키텍처는 이러한 구조를 채택했다.
대표적으로 M1 칩이 다중 코어 시스템을 매우 적극적으로 활용했다. 높은 성능의 GPU를 단일 칩에 탑재해 뛰어난 성능과 적은 전력소모를 가지는 칩이다.
많은 CPU를 효율적으로 사용하기 위해서 각 CPU에 작고 빠른 로컬 버스를 통해 액세스 되는 자체 로컬 메모리를 제공할 수 있다. 모든 CPU가 공유 시스템 연결로 연결되어 모든 CPU가 하나의 물리 주소 공간을 공유하게 된다.
이를 NUMA라고 하며 아래 그림과 같은 구성을 보인다.
NUMA 시스템의 단점은 CPU가 시스템간의 상호 연결을 위해 외부 메모리에 액세스해야할 때, 지연 시간이 증가하여 성능 저하가 발생할 수 있다는 점이다.
이러한 단점을 해결하기 위해서는 효율적인 CPU 스케줄링 및 메모리 관리를 통해서 단점을 최소화 할 수 있다.
블레이드 서버
다수의 처리기 보드 및 입출력 보드, 네트워킹 보드들이 하나의 프레임안에 장착되는 형태이다.
이는 독립적으로 각 처리기들이 부팅될 수 있다는 특징이 있다.
3. 클러스터형 시스템
각 노드(다중 코어 시스템)들을 연결하여 하나의 시스템을 구성하는 방식이다.
이 시스템은 약결합 방식으로 분류된다. 일반적으로 저장 장치를 공유하고, LAN이나 고속 상호 연결망으로 서로 연결된다.
클러스터의 특징으로는 하나의 노드가 망가져도 동일한 서비스는 계속 제공될 수 있다는 점이다.
하나의 노드가 고장나면 그 노드를 감시하던 노드가 고장 난 노드의 저장장치에 대한 소유권을 넘겨받고, 그 노드에서 실행중이던 응용 프로그램을 대신 수행한다.
이러한 높은 가용성으로 인해 남아있는 하드웨어 수준에 비례해 서비스를 제공하는 우아한 성능 저하라는 말이 생겨났다. 그리고 단일 구성요소에 오류가 발생해도 계속 동작할 수 있기 때문에 결함 허용 시스템이라고 부른다.
비대칭형 클러스터링
다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 긴급 대기 모드 상태를 유지한다.
대기 모드 컴퓨터는 활성 서버들을 감시하는 작업만을 수행한다.
서버가 고장나면 긴급 대기 모드 컴퓨터가 활성 서버가 된다.
대칭형 클러스터링
둘 이상의 호스트들이 응용 프로그램을 실행하고 서로를 감시한다.
하드웨어를 모두 사용하기 때문에 비대칭에 비해 더 효율적이다.
하지만 효율적으로 동작하기 위해서는 하나 이상의 프로그램이 정상 작동해야한다.
하나의 클러스터가 네트워크로 연결된 다수의 컴퓨터로 구성되므로 고성능 계산환경을 제공하는데 사용될 수 있다.
특히 병렬화 기법을 사용해서 프로그램을 컴퓨터의 개별 코어 또는 각 컴퓨터에서 분리해서 작업할 수 있다.
병렬 클러스터
여러 노드가 공유 저장장치상의 동일한 데이터에 접근할 수 있게 한다.
대표적으로 Oracle에서 만든 Oracle Real Application Cluster가 있다. 이는 Oracle 데이터베이스 버전이다.
데이터에 대한 공유 접근을 제공하기 위해서 시스템은 접근 간에 충돌이 발생하지 않음을 보장해야 한다. 따라서 이를 보장하기 위한 접근 제어와 잠금 기법을 제공한다. 분산 잠금 관리자(DLM)라고 부른다.
스토리지 전용 네트워크(Stoage Area Network, SAN)
SAN은 여러 호스트를 여러 저장장치에 부착할 수 있게 한다.
애플리케이션과 데이터가 SAN에 저장되면 임의의 호스트는 해당 애플리케이션과 데이터에 대한 권한을 받는다.
만약 권한을 받은 호스트가 고장나면 다른 호스트가 권한을 넘겨 받는다.
따라서 수십 개의 호스트가 데이터베이스를 공유받을 수 있게되고, 성능과 신뢰도가 매우 향상된다.
운영체제의 작동
1. 다중 프로그래밍
일반적인 프로그램은 CPU를 항상 사용하지는 않기 때문에 운영체제는 CPU를 최대한 효율적으로 사용하기 위해서 여러 프로그램을 실행할 수 있게 작동한다. 이를 다중프로그래밍 이라 하고, 다중 프로그램 시스템에서 실행중인 프로그램을 프로세스라고 한다.
운영체제는 여러 프로세스를 동시에 메모리에 유지하면서 이러한 프로세스 중 하나를 선택하여 실행한다.
쉽게 말해서 CPU가 쉬지 못하도록 여러 프로세스를 동시에 작업목록에 위치해놓고, 하나의 프로세스가 끝나면 대기중인 프로세스를 실행하는 루틴을 반복한다.
2. 다중 태스킹
사용자가 I/O 기능을 사용할 때, 예를 들어 프로그램과의 대화식 입출력을 사용한다고 가정하자.
이러한 대화식 입출력은 사람의 속도로 진행되므로 컴퓨터의 입장에서는 매우 느린 속도이다. 따라서 이러한 대화식 입력이 진행되는 동안 CPU를 쉬게 하지 않고, 운영체제는 CPU가 다른 프로세스를 수행할 수 있도록 전환해준다.
이처럼 운영체제는 여러 프로세스를 동시에 실행하고, 매번 다음에 실행할 프로세스를 선택해야 함을 알 수 있다.
이 선택은 이후에 살펴볼 CPU 스케줄링 시스템에 의해서 수행된다.
그리고 여러 프로세스를 동시에 실행하려면 스케줄링 이외에도 디스크 저장장치 및 메모리 관리를 포함한 운영체제의 모든 단계에서 서로 영향을 미치는 기능이 조금씩 제한되어야 한다.
이중모드와 다중모드 운용
운영체제와 사용자는 컴퓨터의 하드웨어 및 소프트웨어 자원을 공유한다.
따라서 운영체제는 잘못된 사용자의 프로그램으로 인해 다른 프로그램 또는 운영체제 자체가 잘못 실행되지 않음을 보장해야한다.
즉, 시스템을 올바르게 실행하기 위해서는 운영체제 코드 실행과 사용자 정의 코드 실행을 구분할 수 있어야 한다는 뜻이다.
그래서 적어도 두 개의 독립된 연산 모드가 존재한다.
바로 사용자 모드와 커널 모드(Supervisor모드, 시스템 모드, privileged 모드)가 있다.
이 둘을 구분하기 위해서 모드 비트(mode bit)라고 하는 하나의 비트가 존재한다. 주로 커널모드(0), 사용자 모드(1) 로 구분된다.
이를 통해서 운영체제를 위하여 실행되는 작업(커널 모드)과 사용자를 위해서 실행되는 작업(사용자 모드)을 구분할 수 있다.
예를 들어, 사용자가 임의의 txt 파일을 컴퓨터에 저장하는 신호를 보냈다. 이때 사용자 모드로 사용자의 명령을 받은 것이다.
사용자 모드는 커널모드에게 txt파일을 저장하기 위한 서비스를 요청하게 된다. (요청 프로토콜을 시스템 콜이라고 부른다.)
요청을 수행하기 위해서 운영체제는 사용자모드에서 커널 모드로 전환되어 작동한다.
시스템 부트 시, 하드웨어는 커널 모드에서 시작한다. 이어서 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다.
트랩이나 인터럽트가 발생할 때마다, 하드웨어는 사용자 모드에서 커널 모드로 전환한다. 그러므로 사용자가 아닌 운영체제가 컴퓨터 자원의 제어를 얻을 때마다 항상 커널 모드에 있게 된다.
운영체제 동작의 이중 모드는 잘못된 사용자로부터 운영체제를 보호하고, 잘못된 사용자 서로를 보호하는 방법을 제공한다.
그리고 악영향을 끼칠 수 있는 일부 명령을 특권 명령(privileged instruction)으로 지정함으로써 이러한 보호를 확실하게 수행하게 된다.
특권 명령은 커널 모드에서만 수행하도록 허용한다. 따라서 사용자 모드에서 특권 명령을 수행하려고 시도한다면, 하드웨어는 이를 실행하지 않고, 불법적인 명령으로 간주해 운영체제로 트랩을 발생시킨다. 대표적인 예로 커널 모드로 전환하는 명령어가 특권 명령어중 하나이다.
운영체제의 타이머
운영체제는 CPU에 대한 제어권을 가지고 있어야 한다.
사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어가 운영체제로 복귀하지 않는 경우가 발생하지 않도록 이를 방지해야 한다. 그래서 지정된 시간 후 컴퓨터를 인터럽트 하도록 설정할 수 있게 해주는 '타이머'를 사용한다.
사용자에게 제어를 양도하기 전에, 운영체제는 타이머가 인터럽트를 할 수 있도록 설정되었는지를 확인한다. 그리고 사용자가 제어를 받아서 CPU를 사용하다가 일정 시간이 지난 후에 타이머는 인터럽트를 발생시켜 제어를 운영체제로 돌려주게 된다. 이때 인터럽트를 오류로 취급하거나, 프로그램에게 더 많은 시간을 줄 수 있다. 따라서 타이머의 값을 변경하는 것은 특권 명령에 속하게 된다.
자원 관리
시스템 관점에서 운영체제는 자원 관리자이다. 시스템의 CPU, 메모리, 파일 저장 공간 및 I/O장치는 운영체제가 관리해야 하는 자원에 속한다.
1. 프로세스 관리
프로그램(프로세스)은 CPU에 의해 명령이 실행되지 않으면 아무것도 할 수 없다. 프로세스는 자신의 일을 수행하기 위해서 CPU 시간, 메모리, 파일, 입출력 장치를 포함한 여러 가지 자원을 필요로 한다. 이러한 자원은 보통 프로세스가 실행되는 동안 할당된다.
프로세스가 생성될 때 획득하는 여러 가지 물리적, 논리적 자원 외에, 여러 초기화 데이터(입력)도 함께 전달될 수 있다.
그리고 프로세스가 종료되면 운영체제는 재사용 가능한 자원을 회수한다.
프로그램 자체는 저장된 파일의 내용처럼 수동적인 개체지만 프로세스는 다음에 수행할 명령을 지정하는 프로그램 카운터를 가진 능동적인 개체이다.
CPU는 프로세스가 끝날 때까지 그 프로세스의 명령을 차례대로 수행한다. 두 개의 프로세스가 동일한 프로그램과 연결되어 있더라도 이들은 두 개의 별도의 수행 순서를 가진다. 다중 스레드 프로세스는 여러 개의 프로그램 카운터를 가지고 있으며 카운터들은 각 스레드가 실행할 다음 명령어를 가리킨다.
프로세스는 하나의 시스템 내의 작업 단위이다.
시스템은 프로세스의 집합으로 구성되는데, 프로세스 중 일부는 운영체제 프로세스이고, 나머지는 사용자 프로세스이다.
운영체제의 프로세스 관리 활동은 다음과 같다.
- 사용자 프로세스와 시스템 프로세스의 생성과 제거
- CPU에 프로세스와 스레드 스케줄하기
- 프로세스의 일시 중지와 재수행
- 프로세스 동기화를 위한 기법 제공
- 프로세스 통신을 위한 기법 제공
2. 메모리 관리
운영체제의 메모리 관리 활동은 다음과 같다.
- 메모리의 어느 부분이 현재 사용되고 있으며 어느 프로세스에 의해 사용되고 있는지를 추적해야 한다.
- 필요에 따라 메모리 공간을 할당하고 회수해야 한다.
- 어떤 프로세스들을 메모리에 적재하고 제거할 것인가를 결정해야 한다.
3. 파일 시스템 관리
운영체제와 파일은 서로 다음과 같은 연관성이 있다.
운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다.
운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 파일에 접근한다.
그리고 파일의 접근 권한을 통제한다.
운영체제의 파일 관리 활동은 다음과 같다.
- 파일의 생성 및 제거
- 디렉터리 생성 및 제거
- 파일과 디렉터리를 조작하기 위한 권한 제공
- 파일을 보조저장장치로 매핑
- 안정적인 저장 매체에 파일을 백업
4. 대용량 저장장치 관리
HDD, SSD 같은 보조저장장치는 컴파일러, 웹 브라우저, 워드 및 게임같은 프로그램을 저장한다.
사용자의 프로그램을 직접 저장하는 만큼 보조저장장치의 적절한 관리는 컴퓨터 시스템에서 가장 중요하다.
운영체제의 보조저장장치 관리 활동은 다음과 같다.
- 마운팅과 언마운팅
- 사용 가능 공간의 관리
- 저장장소 할당
- 디스크 스케줄링
- 저장장치 분할
- 보호
5. 캐시 관리
데이터는 일반적으로 특정한 저장장치에 보관된다.
데이터가 사용됨에 따라, 더 빠른 장치인 캐시에 일시적으로 복사된다. 그래서 우리가 특정 데이터가 필요할 경우, 먼저 캐시에 그 데이터가 있는지를 확인해본다. 만약 캐시에 있으면 캐시에 있는 데이터를 바로 사용하지만, 없다면 메모리로부터 데이터를 가져와서 사용한다. 이때 캐시 교체 정책에 따라서 가져온 데이터를 캐시에 저장할지 말지를 결정한다.
운영체제는 이러한 캐시 교체 정책을 관리한다.
만약 CPU가 여러 개의 프로세스 사이에서 전환되는 다중 태스킹 환경에서는, 여러 개의 프로세스가 A라는 파일에 접근하기를 원하는 경우 각 프로세스가 가장 최근에 갱신된 A의 값을 얻을 것을 보장하는 작업이 필요하다.
이를 캐시 일관성 문제라고 하며, 분산 시스템에서 이러한 문제는 더욱 복잡해진다. 분산 시스템에서는 동일한 파일의 여러 사본을 다른 컴퓨터에 보관할 수 있다. 따라서 분산된 파일을 모두 업데이트 할 때 복제본을 최신 상태로 유지하는 것을 보장해야한다.
운영체제는 보장을 달성하기 위해서 다양한 방법을 사용한다.
6. 입출력 시스템 관리
운영체제의 입출력 시스템 관리
- 버퍼링, 캐싱, 스풀링을 포함한 메모리 관리 구성요소
- 일반적인 장치 드라이버 인터페이스
- 특정 하드웨어 장치들을 위한 드라이버
보안과 보호
컴퓨터 시스템이 다수의 사용자를 가지고 다수 프로세스의 병렬 수행을 허용한다면 데이터에 대한 접근은 사용자, 프로세스 별로 반드시 규제되어야 한다. 이를 위해서 운영체제로부터 적절한 허가를 획득한 프로세스만이 작업 할 수 있도록 보장하는 기법이 필요하다.
예를 들어, 메모리 주소지정 하드웨어는 프로세스가 자신의 주소 영역에서만 실행될 수 있도록 보장해야한다. 타이머는 모든 프로세스가 CPU의 제어를 얻은 후 결국 제어를 양도하도록 보장해야한다.
이처럼 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 사용자의 접근을 제어하는 기법을 보호(protection)라고 한다.
사용자의 인증 정보가 도난당했다고 가정하자. 파일과 메모리 보호 기능이 작동하더라도 사용자의 데이터는 복사, 삭제될 수 있다. 이러한 외부, 내부의 공격을 방어하는 것이 바로 보안 기능이다. 공격에는 바이러스, 웜, 서비스 거부 공격, 식별자/서비스 도용 등이 있다.
보안기능은 운영체제 자체에서 사용하거나 부가적인 프로그램의 도움을 받을 수 있다.
가상화
단일 컴퓨터의 하드웨어를 여러 가지 실행 환경으로 추상화 하여 개별 환경이 자신만의 컴퓨터에서 실행되고 있다는 환상을 만들 수 있는 기술이다.
가상 머신을 사용하면 단일 운영체제에서 동시에 실행되는 다양한 프로세스를 전환할 수 있는 것과 동일한 방식으로 다양한 운영체제간의 전환이 가능하다. 즉, 가상의 운영체제가 다른 운영체제 내에서 하나의 프로그램처럼 사용될 수 있게 한다.
VMware 또는 virtual box같은 가상화 소프트웨어를 사용해 구축한 리눅스 환경을 가상환경이라고 할 수 있다. 그리고 Macbook에서 Intel대상으로 만들어진 프로그램을 실행하기 위해서 사용하는 에뮬레이터인 'Rosseta'도 가상화 소프트웨어라고 할 수 있다.
분산 시스템
물리적으로 떨어져 있는 컴퓨터들의 집합이다.
분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들에 접근할 수 있도록 네트워크로 연결되어 있다.
이때 네트워크는 주로 TCP/IP 네트워크 프로토콜을 사용한다. 대부분의 운영체제가 TCP/IP를 지원하기 때문이다.
분산 시스템에서의 네트워크는 노드(컴퓨터)간의 거리에 따라서 유형이 결졍된다.
하나의 방, 층에 컴퓨터가 있다면 LAN(근거리 통신망), 도시 또는 국가 사이의 컴퓨터를 분산시스템으로 묶기 위해서는 WAN(광역 통신망)을 사용한다.
커널 자료구조
리스트
크기가 변하는 데이터를 저장하거나 한 데이터를 제거하고 나머지 데이터들을 유지하기 위해서 사용한다.
삽입, 삭제가 쉽지만 특정 데이터를 찾는 작업의 수행시간이 O(n)이라는 단점이 있다.
스택
함수를 호출하는 경우 주로 스택을 사용한다.
함수를 호출할 때 인수, 지역변수 및 복귀 주소 등이 스택에 push되고 함수로부터 복귀할 때 이들 항을 스택으로 부터 pop 한다.
큐
프린터에 보내진 작업은 제출된 순서대로 인쇄 된다. 이처럼 CPU에 수행을 기다리는 태스크들은 종종 큐로 구성된다.
트리
일반적인 이진 트리는 최악의 경우 찾기 성능이 O(n)이 될 수 있다. 이러한 상황을 방지하기 위해 균형 이진 탐색 트리를 사용한다.
Linux의 CPU 스케줄링 알고리즘의 일부로 red-black 트리(균형 이진 탐색 트리)를 사용한다.
해시, 맵
해시의 찾기 성능이 항상 O(1)이므로 운영체제에서 광범위하게 사용된다.
해시 충돌을 막기위해서 테이블의 각 항에 연결 리스트를 두어 동일한 해시 값을 갖는 모든 항을 수록하게 한다.
해시 함수는 주로 해시 맵을 구현하는데 사용된다. 해시 맵은 해시 함수를 사용하여 [key:value]를 연관시킨다.
비트맵
자원의 가용성을 표시할 때 일반적으로 사용된다.
001011101
(왼쪽부터 순서)자원 2, 4,5, 6, 8 은 이미 사용중이다.
디스크 드라이브는 디스크 블록이라 불리는 수천 개의 독립된 단위로 나누어진다. 각 디스크 블록의 가용 여부를 나타내기 위해 비트맵을 사용할 수 있다.
요약
- 운영체제는 컴퓨터 하드웨어를 관리하고 응용 프로그램 실행 환경을 제공하는 소프트웨어이다.
- 인터럽트는 하드웨어가 운영체제와 상호 작용하는 주요 방법이다. 하드웨어 장치는 CPU에 신호를 보내 인터럽트를 촉발하여 일부 이벤트에 주의가 필요하다는 것을 CPU에 경고한다. 인터럽트는 인터럽트 핸들러에 의해 관리된다.
- 컴퓨터가 프로그램을 실행하려면 프로그램이 메인 메모리에 있어야 한다. 이 메모리는 프로세서가 직접 엑세스 할 수 있는 유일한 대용량 저장소이다.
- 메인 메모리는 일반적으로 전원을 끌 때 내용이 손실되는 휘발성 저장장치이다.
- 다중 태스킹은 CPU 스케줄링 알고리즘을 사용한 프로세스 간의 빠른 전환을 통해 사용자에게 빠른 응답 시간을 제공하는 다중 프로그래밍의 확장이다.
- 사용자 프로그램이 시스템의 올바른 작동을 방해하지 않도록 시스템 하드웨어에는 사용자 모드와 커널 모드의 두 가지 모드가 있다.
- 다양한 명령어가 특권을 가지며 커널 모드에서만 실행될 수 있다. 예를 들어 커널 모드로 전환하는 명령, I/O 제어, 타이머 관리 및 인터럽트 관리가 특권 명령어에 속한다.
- 프로세스는 운영체제의 기본 단위이다. 프로세스 관리에는 프로세스 생성 및 삭제와 프로세스 통신 및 동기화 기법 제공이 포함된다.
- 운영체제는 사용 중인 메모리 영역과 사용 중인 프로세스를 추적하여 메모리를 관리한다. 또한 메모리 공간을 동적으로 할당하고 해제해야 한다.
- 저장장치 공간은 운영체제에서 관리한다. 관리에는 파일 및 디렉토리를 나타내는 파일 시스템을 제공하고 대용량 저장장치의 공간을 관리하는 것이 포함된다.
- 운영체제는 운영체제 및 사용자를 보호하기 위한 기법을 제공한다. 보호 조치는 컴퓨터 시스템에서 사용 가능한 자원에 대한 프로세스 또는 사용자의 액세스를 제어한다.
- 가상화에는 컴퓨터 하드웨어를 여러 가지 실행 환경으로 추상화하는 작업이 포함된다.
- 운영체제에서 사용되는 자료구조에는 리스트, 스택, 큐, 트리 및 맵이 포함된다.
- 컴퓨팅은 전통적인 컴퓨팅, 모바일 컴퓨팅, 클라이언트-서버 시스템, 피어 간 시스템, 클라우드 컴퓨팅 및 실시간 임베디드 시스템을 포함한 다양한 환경에서 이루어진다.
연습 문제
1.1 운영체제의 세 가지 주요 목적은 무엇인가?
- 사용자가 시스템을 사용하기 위한 편의성을 향상시킨다.
- 시스템을 효율적으로 사용하기 위해서 하드웨어의 자원을 알맞게 할당해준다.
- 프로그램을 실행, 감독하고, 사용자 권한을 관리한다.
1.2 컴퓨팅 하드웨어를 효율적으로 사용하려면 운영체제가 필요하다고 강조하였다. 운영체제가 이 원칙을 버리고 자원을 낭비하는 것이 적절한 때는 언제인가? 그러한 시스템이 실제로 낭비하는 것이 아닌 이유는 무엇인가?
- 사용자의 편의성을 위해서 많은 자원을 사용하는 경우이다.(사용자와의 상호작용) 하지만 이는 운영체제의 목적에 부합하는 동작(사용자의 용이성 향상)이기 때문에 낭비라고 볼 수 없다.
1.3 실시간 환경을 위해 운영체제를 작성할 때 프로그래머가 극복해야 하는 주요 어려움은 무엇인가?
- 실시간으로 빠른 응답이 필요하기 때문에 오류 상황에대한 세부적인 예외처리가 필요하다. 빠른 작업처리와 올바른 작업 순서를 정하는 스케줄링 알고리즘을 신경써서 설계해야 한다.
1.4 운영체제의 다양한 정의를 염두에 두고 운영체제에 웹 브라우저 및 메일프로그램과 같은 응용프로그램이 포함되어야 하는지 생각해 보자. 포함시킨다와 포함시키지 않는다는 주장 모두의 입장에서 논증하라.
- 포함 시킨다
기본적인 응용프로그램이 운영체제에 포함되었기 때문에 커널을 효율적으로 사용할 수 있게 될 것이므로 성능이 향상된다. - 포함시키지 않는다
먼저 운영체제의 크기가 상당히 커질 수 있다.
외부 네트워크를 사용하는 응용프로그램이 운영체제의 내부 커널을 사용하게 된다면 보안상의 취약점이 드러날 수 있다.
운영체제는 웹 브라우저같은 응용 프로그램의 사용을 편리하게 해주지만, 응용 프로그램이 운영체제에 포함된다면 오히려 운영체제의 성능이 감소할 수 있다.
1.5 커널 모드와 사용자 모드의 구별은 기본적인 형태의 보호(보안)로서 어떤 기능을 하는가?
- 커널 모드에서만 사용할 수 있는 특권명령어를 지정해줌으로서 허가되지 않은 사용자의 데이터접근 또는 자원의 사용을 막는다. 사용자가 임의로 자원을 할당하고 삭제, 반환하는 작업을 할 수 없게 한다.
1.6 특권 명령이어야 하는 명령어는 무엇인가?
CPU의 사용을 제어할 수 있는 타이머, 인터럽트 설정은 특권 명령이어야 한다.
메모리에 관련된 설정은 특권 명령이어야 한다.
입출력 장치(I/O)에 관한 설정은 특권 명령이어야 한다.
- 타이머 설정
- 메모리 내용 삭제
- 인터럽트 끄기
- 장치 상태 테이블의 항목 수정
- 사용자에서 커널 모드로 전환
- I/O 장치 액세스
1.7 일부 초기 컴퓨터는 운영체제를 사용자 작업이나 운영체제 자체에 없는 메모리 파티션에 배치하여 운영체제를 보호하였다. 이러한 기법에서 발생할 수 있다고 생각되는 두 가지 어려움을 설명하라.
- 운영체제가 관리할 수 없는 메모리에 운영체제가 있기 때문에 유지보수가 어려울 것이라고 생각한다.
- 운영체제가 관리하는 데이터나 암호 등이 운영체제가 관리하지 않는 메모리에 있기 때문에 보안 측면에서 어려움이 있을 것이다.
'CS > OS' 카테고리의 다른 글
[운영체제] Ch3. 프로세스 (0) | 2022.02.09 |
---|---|
[운영체제] Ch2. 운영체제 구조 (0) | 2022.02.06 |
[OS] Virtual Memory #1 (0) | 2021.07.21 |
[OS] Scheduling #3 (0) | 2021.07.12 |
[OS] Scheduling #2 (0) | 2021.07.10 |