LabHub

블로그

[운영체제] 01. 운영체제란 무엇인가

한국어English日本語

운영체제란 무엇인가

운영체제(Operating System)는 컴퓨터 하드웨어를 관리하고, 응용 프로그램에게 실행 환경을 제공하는 소프트웨어다. 사용자와 하드웨어 사이의 중재자 역할을 수행한다.

운영체제의 네 가지 구성 요소

컴퓨터 시스템은 크게 네 가지 요소로 구성된다.

  1. 하드웨어: CPU, 메모리, I/O 장치 등 기본 자원을 제공한다
  2. 운영체제: 하드웨어를 제어하고 응용 프로그램 간 자원을 조율한다
  3. 응용 프로그램: 워드 프로세서, 컴파일러, 웹 브라우저 등 사용자 문제를 해결한다
  4. 사용자: 사람, 다른 기계, 또는 다른 컴퓨터

운영체제의 역할

운영체제는 관점에 따라 두 가지로 정의할 수 있다.

더 보편적인 정의로는, 운영체제는 컴퓨터에서 항상 실행 중인 프로그램인 커널(kernel)이다.


컴퓨터 시스템 구성

인터럽트(Interrupt)

인터럽트는 하드웨어가 CPU에게 이벤트 발생을 알리는 메커니즘이다. I/O 장치가 작업을 완료하면 인터럽트를 통해 CPU에 신호를 보낸다.

[인터럽트 처리 과정]

1. I/O 장치가 작업 완료
2. 장치 컨트롤러가 인터럽트 신호 발생
         |
         v
3. CPU가 현재 작업 중단
4. 현재 상태(PC, 레지스터)를 스택에 저장
         |
         v
5. 인터럽트 벡터를 통해 ISR 주소 확인
6. ISR(Interrupt Service Routine) 실행
         |
         v
7. 저장된 상태 복원
8. 중단된 작업 재개

인터럽트의 종류는 다음과 같다.

// 인터럽트 벡터 테이블 개념도
// 각 인터럽트 번호에 대응하는 ISR 주소를 저장

typedef void (*isr_handler_t)(void);

isr_handler_t interrupt_vector_table[256];

// 인터럽트 번호 0: 0으로 나누기 예외
// 인터럽트 번호 1: 디버그 예외
// 인터럽트 번호 14: 페이지 폴트
// ...
// 인터럽트 번호 32~255: 사용자 정의(I/O 장치 등)

void handle_interrupt(int interrupt_number) {
    // 인터럽트 벡터에서 핸들러를 찾아 실행
    isr_handler_t handler = interrupt_vector_table[interrupt_number];
    if (handler != NULL) {
        handler();
    }
}

저장 장치 계층 구조

저장 장치는 속도, 비용, 휘발성에 따라 계층을 이룬다.

[저장 장치 계층]

      빠름 / 비쌈 / 작음
        +-----------+
        | 레지스터   |    < 1ns
        +-----------+
        |  캐시 (L1) |    ~1ns
        +-----------+
        |  캐시 (L2) |    ~4ns
        +-----------+
        |  캐시 (L3) |    ~10ns
        +-----------+
        | 메인 메모리 |    ~100ns     (휘발성)
        +-----------+
        |   SSD     |    ~100us     (비휘발성)
        +-----------+
        |   HDD     |    ~10ms
        +-----------+
      느림 / 저렴 /

캐싱(Caching)은 느린 저장소의 데이터를 빠른 저장소에 임시로 복사하는 기법이다. 동일한 데이터에 다시 접근할 때 빠른 저장소에서 읽으므로 성능이 향상된다.

I/O 구조

I/O 작업은 CPU와 장치 컨트롤러 간의 상호작용으로 이루어진다.

[DMA 동작 과정]

CPU                     DMA 컨트롤러           메모리
 |                           |                   |
 |-- DMA 전송 요청 --------->|                   |
 |   (소스, 목적지, 크기)     |                   |
 |                           |--- 데이터 전송 --->|
 |                           |--- 데이터 전송 --->|
 |                           |--- 데이터 전송 --->|
 |<-- 전송 완료 인터럽트 ----|                   |
 |                           |                   |

컴퓨터 시스템 아키텍처

멀티프로세서 시스템

현대 컴퓨터는 대부분 멀티프로세서 시스템이다. 장점은 다음과 같다.

  1. 처리량 증가: N개의 프로세서가 있으면 처리 속도가 향상된다 (단, N배는 아님)
  2. 규모의 경제: 여러 단일 프로세서 시스템보다 비용 효율적
  3. 신뢰성 향상: 하나가 고장나도 전체 시스템은 계속 동작 (graceful degradation)

멀티프로세서 시스템에는 두 가지 유형이 있다.

[SMP 아키텍처]

  CPU 0        CPU 1        CPU 2
 [레지스터]   [레지스터]   [레지스터]
 [캐시]       [캐시]       [캐시]
    |             |             |
    +------+------+------+------+
           |             |
      [공유 메모리]  [I/O 시스템]

멀티코어 시스템

멀티코어 프로세서는 하나의 칩에 여러 코어를 포함한다. 같은 칩 안에서 통신하므로 별도 프로세서 간 통신보다 빠르고 전력 소비도 적다.

[멀티코어 프로세서 구조]

+--------------------------------------+
|           하나의 CPU|
|  +--------+  +--------+  +--------+ |
|  | 코어 0  |  | 코어 1  |  | 코어 2  | |
|  |[L1캐시] |  |[L1캐시] |  |[L1캐시] | |
|  +--------+  +--------+  +--------+ |
|         +----------+                  |
|         | L2 캐시   |                  |
|         +----------+                  |
+--------------------------------------+
              |
         [메인 메모리]

NUMA (Non-Uniform Memory Access)

CPU 수가 많아지면 시스템 버스가 병목이 된다. NUMA는 각 CPU에 자체 로컬 메모리를 제공하여 이 문제를 해결한다.

[NUMA 아키텍처]

+------------------+     인터커넥트     +------------------+
|     노드 0       |<================>|     노드 1       |
| CPU 0  CPU 1    |                   | CPU 2  CPU 3    |
| [로컬 메모리 0]  |                   | [로컬 메모리 1]  |
+------------------+                   +------------------+

로컬 메모리 접근: 빠름 (~100ns)
원격 메모리 접근: 느림 (~300ns)

운영체제 운영 방식

이중 모드(Dual-Mode) 운영

OS는 사용자 프로그램의 잘못된 동작으로부터 시스템을 보호해야 한다. 이를 위해 두 가지 실행 모드를 제공한다.

[모드 전환 과정]

사용자 모드                          커널 모드
    |                                   |
    |-- 시스템 콜 호출 ---------------->|
    |   (트랩 발생, 모드 비트 0)        |
    |                                   |-- 시스템 콜 처리
    |                                   |
    |<-- 시스템 콜 반환 ---------------|
    |   (모드 비트 1로 복원)            |
    |                                   |
// 시스템 콜 예시: 파일 읽기
// 사용자 프로그램에서 read() 호출

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
    char buffer[1024];

    // open()은 시스템 콜을 통해 커널 모드로 전환
    int fd = open("data.txt", O_RDONLY);

    // read()도 시스템 콜 - 커널이 I/O 수행
    ssize_t bytes = read(fd, buffer, sizeof(buffer));

    printf("읽은 바이트: %zd\n", bytes);
    close(fd);
    return 0;
}

타이머(Timer)

타이머는 프로그램이 CPU를 독점하는 것을 방지한다. 일정 시간이 지나면 인터럽트를 발생시켜 OS에 제어를 넘긴다.


자원 관리

프로세스 관리

프로세스는 실행 중인 프로그램이다. OS는 다음을 수행한다.

메모리 관리

메인 메모리는 CPU가 직접 접근할 수 있는 유일한 대용량 저장소다. OS는 다음을 관리한다.

저장 장치 관리

OS는 저장 장치의 물리적 특성을 추상화하여 논리적 파일 개념을 제공한다.

I/O 서브시스템

OS의 I/O 서브시스템은 하드웨어 장치의 차이를 숨긴다.


보호와 보안

각 사용자에게는 고유 ID(UID)가 부여되고, 그룹 ID(GID)를 통해 그룹 단위 접근 제어도 가능하다. 권한 상승(privilege escalation)은 일시적으로 더 높은 권한을 얻는 메커니즘으로, Unix에서는 setuid 비트를 통해 구현한다.


정리

[운영체제 핵심 개념 요약]

+------------------------------------------+
|              응용 프로그램                  |
+------------------------------------------+
|       운영체제 (커널)                      |
|  +------+ +--------+ +--------+ +------+ |
|  |프로세스| |메모리   | |파일    | |I/O   | |
|  |관리   | |관리     | |시스템  | |관리   | |
|  +------+ +--------+ +--------+ +------+ |
+------------------------------------------+
|              하드웨어                      |
|  CPU / 메모리 / 디스크 / I/O 장치         |
+------------------------------------------+

운영체제는 하드웨어와 사용자 사이에서 자원을 관리하고, 프로그램 실행 환경을 제공하며, 시스템을 보호하는 핵심 소프트웨어다. 이중 모드 운영, 인터럽트, 타이머 등의 하드웨어 지원을 활용하여 안전하고 효율적인 시스템 운영을 보장한다.

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다