OS Lecture2 정리본이다. 퀴즈 대비 용도지만, midterm 때도 활용할 목적으로 정리했다. 그리고 CS 기초지식을 위해서라도 한번쯤 읽어보고 이해해 보는 것도 나쁘지는 않을것 같다.
Monolithic systems
"Monolithic Systems"는 운영 체제의 구조 중 하나로, 모든 운영 체제 구성 요소가 하나의 커널 내에서 실행되는 방식을 나타냅니다. 이러한 구조에 대한 주요 특징과 예시를 설명해드리겠습니다.
주요 특징:
-
단일 커널 내 실행: Monolithic 시스템은 모든 운영 체제 구성 요소가 단일 커널 내에서 실행됩니다. 이것은 프로세스 관리, 파일 시스템, 장치 드라이버, 메모리 관리 등 모든 기능이 같은 주소 공간에서 실행됨을 의미합니다.
-
효율성: Monolithic 시스템은 효율성과 뛰어난 성능으로 알려져 있습니다. 서로 다른 커널 구성 요소 간의 통신 오버헤드가 최소화되기 때문에 빠른 실행이 가능합니다.
-
복잡성: 이러한 시스템은 구성 요소들이 강하게 통합되어 있기 때문에 복잡할 수 있습니다. 디버깅 및 유지 관리가 복잡할 수 있으며, 한 부분에서의 버그나 오류가 전체 시스템을 충돌시킬 수 있어 안정성에 문제가 될 수 있습니다.
-
모듈화 부족: 모듈 경계가 명확하지 않아 개별 구성 요소를 추가, 수정 또는 교체하기 어려울 수 있습니다. 한 부분을 변경하면 전체 시스템에 영향을 미칠 수 있습니다.
예시:
-
Linux: Linux 운영 체제는 대표적인 Monolithic 구조를 가진 운영 체제 중 하나입니다. 모든 기능이 Linux 커널 내에서 실행됩니다.
-
Microsoft Windows: 이전 버전의 Microsoft Windows (예: Windows 95, 98) 역시 Monolithic 구조를 사용했습니다. 그러나 최근 버전의 Windows 운영 체제는 하이브리드 구조로, 일부 커널 모드 컴포넌트와 유저 모드 컴포넌트가 분리되어 있습니다.
Monolithic 시스템은 성능이 중요한 환경에서 효과적일 수 있지만, 유지 관리와 안정성 측면에서 도전적일 수 있습니다. 이러한 단점을 극복하기 위해 모듈화된 운영 체제 아키텍처가 개발되었습니다.
Layered systems
"Layered Systems"는 운영 체제의 구조 중 하나로, 각 계층이 하위 계층 위에 구축되는 계층 구조로 구성된 운영 체제를 나타냅니다. 이러한 구조에 대한 설명과 예시에 대해 알아보겠습니다.
설명:
-
계층적 구조: Layered 시스템은 계층적으로 구성됩니다. 각 계층은 그 아래에 있는 하위 계층 위에 구축됩니다. 이것은 각 계층이 특정 기능 또는 서비스를 제공하고 다음 계층에 대한 인터페이스를 제공하는 방식으로 동작합니다.
-
계층 간 인터페이스: 각 계층은 하위 계층과의 인터페이스를 가지며, 이를 통해 서비스 및 데이터 전달이 이루어집니다. 각 계층은 상위 계층의 요청을 처리하고 하위 계층에 대한 요청을 전달합니다.
-
모듈화: 계층화된 구조는 모듈화 및 추상화를 촉진합니다. 각 계층은 자체적으로 독립적으로 개발 및 유지 관리할 수 있으며, 변경 시 다른 계층에 영향을 미치지 않아야 합니다.
예시:
- THE (Technische Hogeschool Eindhoven) System: THE 시스템은 네덜란드의 E. W. Dijkstra와 그의 학생들에 의해 1968년에 개발된 운영 체제입니다. 이 시스템은 계층화된 구조로 구성되어 있으며, 각 계층이 서로 다른 기능을 수행하고 하위 계층과의 인터페이스를 제공합니다.
계층화된 시스템은 모듈화와 확장성을 촉진하는 장점을 가지고 있으며, 다양한 운영 체제에서 사용될 수 있습니다. 각 계층은 해당 계층에서 필요한 서비스를 제공하고, 상위 계층에서는 이러한 서비스를 활용하여 더 고수준의 기능을 구현합니다.
Microkernels
Microkernels는 운영 체제를 작고 잘 정의된 모듈로 분할하여 신뢰성을 높이려는 기본 아이디어를 가진 구조입니다. 이 구조에서는 마이크로 커널(microkernel)만 커널 모드에서 실행하며 나머지는 상대적으로 권한이 없는 일반 사용자 프로세스로 실행됩니다. 이러한 시스템의 특징과 예시를 살펴보겠습니다.
특징:
-
모듈성 (Modularity): 마이크로커널 시스템은 매우 모듈화되어 있습니다. 파일 시스템, 디바이스 드라이버 및 네트워크 프로토콜과 같은 운영 체제 기능은 커널이 아닌 사용자 공간에서 실행되는 별도의 모듈 또는 서버로 구현됩니다.
-
최소화된 커널 (Minimized Kernel): 마이크로커널 자체는 상호 프로세스 통신 (IPC) 및 프로세스 관리와 같은 가장 기본적인 기능만 포함하고 있습니다. 이 최소화는 커널 내의 신뢰 코드 베이스를 줄이므로 시스템 보안과 안정성을 향상시킬 수 있습니다.
-
보안 (Security): 마이크로커널은 종종 더 안전합니다. 작은 신뢰 컴퓨팅 베이스를 갖기 때문입니다. 보안에 중요한 구성 요소는 별도의 모듈로 분리되어 있어 공격 표면을 줄이고 보안 취약점의 영향을 최소화합니다.
-
확장성 (Extensibility): 새로운 기능, 드라이버 또는 서비스를 마이크로커널 기반 시스템에 추가하는 것은 상대적으로 간단합니다. 핵심 커널에 중요한 변경 없이 모듈을 추가, 업데이트 또는 교체할 수 있습니다.
-
성능 오버헤드 (Performance Overhead): 마이크로커널은 모듈 또는 서버가 커널과 통신해야 하는 상호 프로세스 통신 (IPC)의 필요로 인해 일반적으로 모노릭커널에 비해 더 높은 성능 오버헤드를 도입합니다.
-
IPC의 복잡성 (Complexity of IPC): IPC 메커니즘을 관리하는 것은 복잡할 수 있으며 성능 병목 현상을 초래할 수 있습니다.
예시:
- Minix: 미닉스는 마이크로커널 기반의 운영 체제로 알려져 있으며 교육 및 연구 목적으로 널리 사용됩니다.
- HelenOS: HelenOS는 마이크로커널 아키텍처를 기반으로 하는 오픈 소스 운영 체제입니다.
- Horizon: Horizon은 마이크로커널 아키텍처를 사용한 경량 운영 체제입니다.
- The L4 microkernel family: L4 마이크로커널은 다양한 운영 체제에서 사용되며 고성능 및 안전성을 강조합니다.
- Zircon (Fuchsia OS): Zircon은 Google의 Fuchsia 운영 체제의 커널로, 마이크로커널 아
키텍처를 기반으로 합니다.
이러한 마이크로커널 시스템은 보안 및 모듈화를 강조하는 환경에서 사용됩니다.
Client- server systems
Client-Server Model은 컴퓨터 네트워크 환경에서 사용되는 중요한 개념입니다. 이 모델은 서버와 클라이언트 간의 상호 작용을 설명하며, 서버가 서비스를 제공하고 클라이언트가 이러한 서비스를 사용하는 방식으로 동작합니다. 이 모델은 단일 컴퓨터 또는 여러 컴퓨터로 구성된 네트워크 환경에서 모두 적용될 수 있는 추상화된 개념입니다.
주요 특징:
-
서버 (Server): 서버는 특정 서비스나 기능을 제공하는 컴퓨터 또는 소프트웨어입니다. 서버는 클라이언트의 요청을 대기하고 이를 처리하여 필요한 결과를 반환합니다. 예를 들어, 이메일 서버, 웹 서버, 데이터베이스 서버 등이 있습니다.
-
클라이언트 (Client): 클라이언트는 서버에서 제공하는 서비스를 사용하려는 컴퓨터 또는 소프트웨어입니다. 클라이언트는 서버에 요청을 보내고 서버의 응답을 받아 사용자에게 제공합니다. 웹 브라우저, 이메일 클라이언트, 애플리케이션 소프트웨어 등이 클라이언트 역할을 수행할 수 있습니다.
-
메시지 패싱 (Message Passing): 클라이언트와 서버 간의 통신은 주로 메시지 패싱을 통해 이루어집니다. 클라이언트는 요청 메시지를 생성하여 서버에 전송하고, 서버는 이를 처리하고 응답 메시지를 클라이언트에게 반환합니다. 이러한 메시지 패싱은 네트워크 통신에서 중요한 역할을 합니다.
용도:
- 웹 서비스: 웹 브라우저(클라이언트)는 웹 서버(서버)에서 웹 페이지를 요청하고 가져와서 사용자에게 표시합니다.
- 이메일: 이메일 클라이언트(클라이언트)는 이메일 서버(서버)에서 이메일을 받아오고 보내는 데 사용됩니다.
- 클라우드 서비스: 클라이언트 애플리케이션은 클라우드 서버에서 데이터를 저장하고 검색하는 데 사용됩니다.
- 데이터베이스 액세스: 데이터베이스 클라이언트는 데이터베이스 서버에서 데이터를 쿼리하고 업데이트하는 데 사용됩니다.
장점:
- 분산 환경에서 효율적인 서비스 제공과 사용자 요청 처리를 지원합니다.
- 모듈화된 아키텍처로 서버와 클라이언트를 분리하여 유지보수와 확장이 용이합니다.
- 여러 클라이언트가 동시에 서비스를 사용할 수 있어 다중 접속을 지원합니다.
단점:
- 네트워크 지연으로 인해 통신 성능에 영향을 미칠 수 있습니다.
- 보안과 관련된 이슈가 발생할 수 있으며, 서버에 대한 공격이나 클라이언트-서버 간의 통신 보안을 고려해야 합니다.
예시:
- 웹 서비스: 웹 브라우저(클라이언트)와 웹 서버(서버) 간
의 상호 작용.
- 이메일: 이메일 클라이언트(클라이언트)와 이메일 서버(서버) 간의 통신.
- 클라우드 스토리지: 클라이언트 애플리케이션(클라이언트)과 클라우드 서버(서버) 간의 데이터 저장 및 접근.
이러한 예시에서 클라이언트는 사용자 또는 응용 프로그램이며, 서버는 서비스를 제공하고 데이터를 관리하는 역할을 합니다.
Virtual machines
**가상 머신 (Virtual Machines)**은 하나의 머신(물리적 컴퓨터)에서 두 개 이상의 운영 체제(OS)를 동시에 실행할 수 있게 해주는 기술입니다. 이것은 하나의 머신에서 여러 개의 가상 환경을 생성하고 각각의 환경에서 독립적으로 운영 체제를 실행할 수 있도록 합니다.
가상 머신의 주요 특징과 용도:
-
하나의 머신에서 다수의 운영 체제 실행: 가상 머신은 물리적 하드웨어 위에 가상의 하드웨어 계층을 생성하며, 이를 사용하여 여러 개의 운영 체제를 병렬로 실행할 수 있습니다.
-
운영 체제 격리 및 독립성: 각 가상 머신은 다른 가상 머신과 독립적으로 실행되며, 하나의 가상 머신에서 발생하는 문제가 다른 가상 머신에 영향을 미치지 않습니다. 이로써 운영 체제 간에 격리를 유지할 수 있습니다.
-
테스트 및 개발: 소프트웨어 개발 및 테스트를 위해 여러 가상 환경을 구축할 수 있습니다. 이를 통해 다양한 플랫폼에서 소프트웨어를 테스트하거나 신뢰성 있는 실험을 수행할 수 있습니다.
-
자원 공유와 최적화: 하나의 머신에서 여러 개의 가상 머신을 실행하여 하드웨어 리소스를 효율적으로 공유하고 최적화할 수 있습니다. 이로 인해 물리적 머신의 활용도가 향상됩니다.
-
서버 가상화: 서버 환경에서 가상 머신을 사용하여 여러 서버를 하나의 머신에서 관리하고 유지보수할 수 있습니다. 이것은 물리적 서버를 가상 서버로 대체하여 하드웨어 비용을 절감하고 데이터 센터 관리를 간소화할 수 있습니다.
가상 머신의 장단점:
장점:
- 하나의 물리적 머신에서 여러 개의 운영 체제를 실행할 수 있어 자원 효율성을 향상시킵니다.
- 가상 머신 간에 격리가 유지되므로 보안 및 안정성이 향상됩니다.
- 개발 및 테스트 환경을 쉽게 구축하고 관리할 수 있습니다.
- 하드웨어 리소스를 공유하고 최적화하여 비용을 절감할 수 있습니다.
단점:
- 가상 머신은 추가적인 오버헤드와 성능 손실을 초래할 수 있습니다.
- 가상 머신 관리와 구성에 대한 학습 곡선이 존재합니다.
- 물리적 하드웨어의 성능 제약을 받을 수 있습니다.
예시:
- VMware: 가상화 솔루션을 제공하는 회사로, VMware Workstation 및 VMware vSphere와 같은 제품을 제공합니다.
- Oracle VirtualBox: 오픈 소스 가상화 솔루션으로, 다양한 운영 체제를 가상 머신에서 실행할 수 있도록 지원합니다.
- Microsoft Hyper-V: Microsoft의 서버 가상화 플랫폼으로, Windows Server
먼저, 다양한 유형의 하이퍼바이저(hypervisor)에 대한 차이를 명확하게 설명하겠습니다:
(a) 타입 1 하이퍼바이저:
- 예시: ESXi (Elastic Sky X Integrated), VMware vSphere, Microsoft Hyper-V (특정 설정에서)
- 이 하이퍼바이저는 일반적으로 호스트 운영 체제 없이 직접 물리 하드웨어 위에서 실행됩니다.
- 하드웨어 위에서 여러 가상 머신(VM)을 관리합니다.
- 주로 엔터프라이즈 환경에서 서버 가상화에 사용됩니다.
- 뛰어난 성능과 리소스 격리를 제공합니다.
- 높은 성능과 리소스 할당 제어가 필요한 경우에 이상적입니다.
(b) 순수 타입 2 하이퍼바이저:
- 예시: VMware Workstation, Oracle VirtualBox
- 이 유형의 하이퍼바이저는 호스트 운영 체제 내에서 애플리케이션으로 실행됩니다.
- 리소스 관리를 위해 호스트 운영 체제에 의존합니다.
- 주로 개발, 테스트 또는 단일 데스크톱 또는 랩톱 컴퓨터에서 여러 운영 체제를 실행해야 하는 경우에 사용됩니다.
- 호스트 운영 체제에 의존하기 때문에 일부 성능 오버헤드가 있을 수 있습니다.
(c) 실용적인 타입 2 하이퍼바이저:
- 이 용어는 하이퍼바이저를 분류하기 위해 일반적으로 사용되지 않지만, VMware Workstation 또는 Oracle VirtualBox와 같은 타입 2 하이퍼바이저를 가리키며 다양한 실용적인 목적으로 사용될 수 있음을 나타낼 수 있습니다.
- 이러한 하이퍼바이저는 주로 개발자, 테스터 또는 단일 컴퓨터에서 여러 운영 체제를 실행해야 하는 사용자에 의해 사용됩니다.
실제 머신 또는 가상 머신 (타입 1 또는 2):
- ESXi와 같은 타입 1 하이퍼바이저는 물리 하드웨어 위에서 직접 실행되며 "실제" 또는 "베어 메탈(bare-metal)" 하이퍼바이저로 간주됩니다.
- VirtualBox와 같은 타입 2 하이퍼바이저는 호스트 운영 체제 내에서 애플리케이션으로 실행되며 VM은 호스트 운영 체제 내에서 실행되므로 "가상" 머신이라고도 합니다.
Clocks(Timers)
Clock Hardware
시계 하드웨어(clock hardware)는 컴퓨터 시스템에서 시간을 추적하고, 주기적인 인터럽트를 생성하는 데 사용됩니다. 아래에 주요 요소와 그 역할을 설명하겠습니다:
-
크리스탈 발진기(Crystal Oscillator):
- 일정 주기로 신호를 생성하는 역할을 합니다.
- 주로 수백 메가헤르츠에서 몇 기가헤르츠 범위의 주파수로 신호를 생성합니다. 선택한 크리스탈에 따라 다릅니다.
-
카운터(Counter):
- 크리스탈 발진기에서 생성된 신호를 받아 카운트다운을 수행합니다.
- 카운터가 0에 도달하면 CPU 인터럽트를 발생시킵니다.
-
홀딩 레지스터(Holding Register):
- 홀딩 레지스터의 값은 카운터로 복사됩니다.
- 시계 하드웨어의 주요 역할은 알려진 간격에서 인터럽트를 생성하는 것입니다.
프로그래머블 클럭(Programmable Clock):
- 프로그래머블 클럭은 소프트웨어로 제어할 수 있는 클럭 모드를 제공합니다.
- 원샷 모드(One-shot mode):
- 클럭이 시작되면 홀딩 레지스터의 값을 카운터로 복사하고, 크리스탈에서의 각 펄스마다 카운터를 감소시킵니다.
- 카운터가 0에 도달하면 인터럽트를 발생시키고, 소프트웨어에 의해 명시적으로 다시 시작될 때까지 중지됩니다.
- 스퀘어 웨이브 모드(Square-wave mode):
- 카운터가 0에 도달하면 인터럽트를 발생시키고, 홀딩 레지스터의 값이 다시 카운터로 복사되어 주기적으로 반복됩니다. 이러한 주기적 인터럽트를 "클럭 틱"이라고 합니다.
프로그래머블 클럭의 장점은 소프트웨어로 인터럽트 주파수를 제어할 수 있다는 것입니다. 예를 들어, 500MHz 크리스탈을 사용하면 카운터가 2나노초마다 펄스를 생성합니다. 32비트 레지스터를 사용하면 2나노초에서 8.6초까지의 간격으로 인터럽트를 프로그래밍할 수 있습니다. 이것은 시스템의 정밀한 타이밍과 타이머 기능을 제공하는 데 유용합니다.
Clock Software
위의 내용은 클록 소프트웨어가 수행하는 다양한 기능과 관련된 내용입니다. 각 기능을 요약해서 설명하겠습니다:
-
시간 유지 (Maintaining the time of day): 클록 소프트웨어는 현재 시스템 시간을 유지하며, 클록 틱(tick) 단위로 시간을 추적합니다. 32비트 카운터를 사용하며, 이 카운터는 클록 틱마다 감소합니다. 하지만 32비트 카운터는 약 2년 후에 오버플로우되므로 더 오랜 시간을 유지하기 위해 64비트 카운터를 사용할 수 있습니다.
-
프로세스 실행 시간 제한 (Preventing processes from running longer than allowed): 프로세스가 시작될 때 스케줄러는 해당 프로세스의 실행 시간을 클록 틱 단위로 초기화합니다. 클록 인터럽트가 발생할 때마다 실행 시간 카운터가 1씩 감소하며, 0이 되면 스케줄러를 호출하여 다른 프로세스를 실행합니다.
-
CPU 사용량 계산 (Accounting for CPU usage): 프로세스가 시작될 때 별도의 타이머를 시작하고, 프로세스가 중단될 때 타이머를 읽어서 해당 프로세스가 실행된 시간을 계산합니다. 이러한 정보를 사용하여 CPU 사용량을 추적합니다.
-
사용자 프로세스의 알람 처리 (Handling alarm system call from user processes): 사용자 프로세스는 일정 시간 경과 후 알람을 요청할 수 있습니다. 많은 알람이 예상되면 클록 요청을 연결하여 시간순으로 정렬된 연결 리스트로 구현할 수 있으며, 이를 통해 여러 알람을 효율적으로 처리합니다.
-
시스템 자체의 감시 타이머 제공 (Providing watchdog timers for parts of system itself): 클록 소프트웨어는 시스템의 일부 부분, 예를 들어 무한 루프 또는 시스템 충돌을 탐지하고 복구하는 감시 타이머를 제공할 수 있습니다. 이러한 기능은 내장 시스템에서 특히 사용됩니다.
-
sysconf(_SC_CLK_TCK): 이것은 시스템의 클록 틱(tick) 속도에 대한 정보를 제공하는 시스템 함수입니다.
이러한 클록 소프트웨어의 역할은 시스템 시간 관리, 프로세스 제어, CPU 사용량 추적, 알람 처리, 감시, 및 타이머 관리 등 다양한 기능을 포함하며, 시스템의 안정성과 동작을 지원합니다.
댓글 없음:
댓글 쓰기