본문 바로가기
IT

운영체제 #1

by 내일은교양왕 2025. 8. 14.

1. 운영체제의 개념과 역할

운영체제(OS)는 하드웨어와 응용 프로그램 사이에서 자원(Resource) 관리자 역할을 한다.
주요 자원:

  • CPU (연산 자원)
  • 메모리 (휘발성 저장 자원)
  • 저장장치 (비휘발성 저장 자원)
  • I/O 장치 (네트워크 카드, 디스크 컨트롤러, USB 등)

개발자 관점에서 운영체제는 크게 두 층으로 나눌 수 있다.

  • 커널(Kernel): 하드웨어 직접 제어, 자원 관리 로직 포함 (리눅스: kernel/, 윈도우: NT Kernel)
  • 유저 공간(User Space): 응용 프로그램, 라이브러리, 셸 등이 실행되는 영역

 

2. 인터럽트와 커널 진입

하드웨어는 CPU와 직접 대화할 수 없고, 대신 인터럽트(Interrupt) 라는 비동기 신호를 통해 이벤트를 알린다.

예시: 네트워크 패킷 수신

  1. NIC(Network Interface Card)가 패킷 수신 → IRQ(Interrupt Request) 발생
  2. CPU는 현재 실행 중인 작업을 멈추고 인터럽트 벡터 테이블(Interrupt Descriptor Table) 참조
  3. 해당 IRQ에 매핑된 인터럽트 서비스 루틴(ISR) 실행 (drivers/net/... 내부)
  4. ISR은 최소한의 처리만 수행하고, 추가 작업은 SoftIRQ나 **Kernel Thread(ksoftirqd)**로 위임

리눅스 커널 예시:

// arch/x86/kernel/entry_64.S
ENTRY(entry_INT80_compat)
    // 유저 모드 → 커널 모드 전환 시 실행
    SAVE_ALL
    call do_syscall_32_irqs_on
    RESTORE_ALL

 

3. 메모리 구조와 관리

프로그램이 실행되려면 메인 메모리에 적재되어야 한다.
현대 OS에서는 가상 메모리(Virtual Memory) 체계를 사용한다.

리눅스 가상 메모리 구성

  • 유저 공간(User Space): 0x0000... ~ 0x7fffffffffff (64bit)
  • 커널 공간(Kernel Space): 0xffff800000000000 ~
  • 페이지 크기: 보통 4KB (x86-64 기준)

페이지 테이블

  • MMU(Memory Management Unit)가 가상 주소 → 물리 주소 변환
  • 페이지 폴트(Page Fault) 발생 시 커널이 디스크에서 해당 페이지 로드

 

4. 저장장치 계층 구조

CPU 캐시 > 메인 메모리 > SSD/HDD > 네트워크 스토리지 순으로 빠르지만 비용이 높음.
운영체제는 버퍼 캐시(Buffer Cache) 와 페이지 캐시(Page Cache) 로 디스크 접근 속도를 높인다.

 

5. CPU 스케줄링과 멀티태스킹

다중 프로그래밍은 여러 프로그램을 메모리에 동시에 적재하여 CPU가 항상 실행할 작업을 확보하고, 다중 태스킹은 CPU 스케줄링 알고리즘을 사용해 프로세스 간을 빠르게 전환(문맥 교환)하여 사용자에게 빠른 응답성을 제공.

 

리눅스 스케줄러(CFS, Completely Fair Scheduler):

  • O(1) 우선순위 큐 대신 Red-Black Tree 사용
  • 각 프로세스의 가상 런타임(vruntime) 을 기준으로 CPU 시간 공정 배분

 

6. 모드 전환과 보호 기법

  • 사용자 모드(User Mode): 제한된 명령만 실행 가능
  • 커널 모드(Kernel Mode): 모든 하드웨어 접근 가능

리눅스에서 시스템 콜 호출 예:

  1. 유저 모드에서 write() 호출
  2. glibc → syscall 어셈블리로 커널 진입
  3. 커널에서 sys_write() 실행 → 파일 시스템 드라이버로 전달

보호 기법:

  • Ring Level (x86: Ring 0=커널, Ring 3=유저)
  • 메모리 보호: 페이지 테이블의 PTE 플래그(R/W, NX 등)
  • I/O 보호: 특정 포트 접근 권한 제어

 

7. 프로세스 관리

프로세스 구조체:

// include/linux/sched.h
struct task_struct {
    pid_t pid;
    long state;
    struct mm_struct *mm;
    struct files_struct *files;
    ...
};

 

  • 프로세스 생성: fork() → copy_process() → 부모 PCB 복사
  • 프로세스 간 통신(IPC): 파이프, 메시지 큐, 공유 메모리, 소켓
  • 동기화 기법 제공 (세마포어, 뮤텍스 등)

 

8. 메모리 관리

  • 메모리 사용 현황(어떤 영역이 사용 중인지, 어떤 프로세스가 사용하는지)을 추적한다.
  • 프로세스의 요청에 따라 메모리 공간을 동적으로 할당/해제한다.

 

9. 저장장치 관리

  • 운영체제는 파일과 디렉토리를 관리하는 파일 시스템(File System) 을 제공한다.
  • 대용량 저장장치의 공간을 효율적으로 관리한다.

리눅스 파일 읽기 흐름:

sys_read()
 → vfs_read()
   → file->f_op->read()
     → 특정 파일시스템 read 구현

 

10. 운영체제 자료구조

  • 리스트: 커널 태스크 큐 (list_head)
  • 스택: 커널 스택, 인터럽트 처리 시 사용
  • 큐: I/O 요청 큐
  • 트리: 스케줄러의 Red-Black Tree
  • 맵: 파일 디스크립터 테이블 (Radix Tree, XArray)

 

'IT' 카테고리의 다른 글

운영체제 #3  (3) 2025.08.16
운영체제 #2  (4) 2025.08.15
admob 정책 위반 예방 5가지  (0) 2025.04.28
Geo-blocking Regulation (EU) 2018/302  (0) 2025.04.23
MCP (Model Context Protocol) 왜 요즘 핫한가?  (0) 2025.03.28