시스템 보안을 위한 컴퓨터 시스템 복습
시스템 관리
- 계정 관리: 사용자를 식별하는 가장 기본적인 인증 수단인 아이디와 패스워드에 대한 관리
- 세션 관리: 일정 시간이 지나면 세션을 종료하고 비인가자의 세션 가로채기를 통제하는 것
- 접근 제어: 네트워크 안에서 시스템을 다른 시스템으로부터 적절히 보호할 수 있도록 접근을 통제하는 것
- 권한 관리: 시스템의 각 사용자가 적절한 권한으로 적절하게 정보 자산에 접근하도록 통제하는 것
- 로그 관리: 시스템 내부나 네트워크를 통해 외부에서 시스템에 어떤 영향을 미칠 경우 그 내용을 기록하여 관리하는 것
- 취약점 관리: 시스템 자체의 결함을 체계적으로 관리하는 것
운영체제 역할
- 여러 개의 사용자 어플리케이션들에게 하드웨어의 가상화를 제공
- 사용자가 하드웨어를 쉽게 사용하기 위한 추상화 (Abstraction) 및 API 제공
→ 프로세스, 가상 메모리, 파일 시스템 등
- 제한된 하드웨어 자원에 대한 원활한 공유
→ 스케줄링, 프로세스 상태 관리
- 접근 제어 및 권한을 활용한 하드웨어 자원 보호
→ 특권 계층(Privilege), 권한(Permission)
- 사용자 어플리케이션 간의 격리 (Isolation)
→ 특권 계층을 통한 Protection domain의 도입
>> 하드웨어와 애플리케이션의 브릿지 역할
추상화
- 컴퓨터 시스템의 복잡도(complexity level)를 정의하고 설정함으로써, 사용자가 시스템의 복잡한 디테일들을 모르고도 시스템과 상호 작용이 가능케 해주는 기술
>> 프로그래머블하게 표현할 때 어떤 속성까지 표현할지 결정
추상화 1. 프로세스 = 실행 중인 프로그램
프로그램과 달리, 프로세스는 메모리에 주소 공간을 갖는 능동적 개체
프로세스가 제공하는 추상화는
- 프로세스 자신만의 주소 공간(address space)
- 해당 프로세스에 대응되는 프로그램 파일
프로세스 제어 블록 (Process Control Block : PCB)
- 프로세스 관리를 위해 유지되는 메타데이터
- 프로세스는 고유의 PCB를 가짐
- CPU에서 context switch가 발생할 때 PCB 정보를 활용
>> 운영체제는 실행 중인 애플리케이션을 프로세스라는 추상화를 통해 정의
가상 메모리 영역이라는 프로세스 별로 사용하는 고유의 메모리 세그먼트를 사용
여러 개의 스레드로 구성, 스레드 별로 context(e.g., 스택)를 관리하여 원활한 스케줄링을 수행
운영 체제는 PCB라는 데이터 구조를 통해 여러 개의 프로세스를 원활하게 관리
추상화 2. 가상 메모리 (virtual memory address space)
= 프로세스 별로 할당된 가상의 주소 공간
Nice abstraction! But…
제한된 물리 메모리에 어떻게 mapping 할 것인가?
→ Address translation (with MMU), 스왑(Swap)
어떻게 효율적으로 mapping을 관리할 것인가?
→ TLB, 페이징(Paging)
제한된 물리 메모리에 어떻게 mapping 할 것인가?
→ 하드웨어를 활용한 페이징(paging) 기반 주소 변환(address translation)
추상화 3. 파일 시스템
파일 시스템을 통해 보조 기억 장치, 즉 HDD 및 SSD를 추상화
운영 체제의 파일 시스템이 파일을 물리적인 디스크 저장장치와 매핑
파일을 “블록”이라는 단위로 구분하여 관리하고, physical block에 대한 매핑을 관리
파일의 raw data와 metadata(e.g., 권한, 소유자, 크기 등) 를 함께 저장하고 관리
리눅스 inode
공유 자원 종류
명령어 실행을 위한 “시간 공유”
- 제한된 CPU 코어 수를 공유
- 해결책: 스케줄링, 프로세스 상태
코드 및 데이터 접근을 위한 “공간 공유”
- 제한된 메모리 영역을 공유
- 해결책: 페이지 교체 알고리즘, 스왑 영역
프로세스 스케쥴링
운영 체제 내 스케줄러(scheduler)가 어떠한 프로세스가 CPU를 점유할 것인지를 결정
- 프로세스에 대한 상태를 설계하고, 상태 전이를 통해 프로세스들을 관리
- 프로세스에 대한 스케줄링에서 나아가 멀티스레드 지원을 위한 스레드 스케줄링 수행
- Round Robin, Shortest Job First 등의 스케줄링 알고리즘이 존재
프로세스 상태 전이
실행: executed in a CPU
준비: in the ready queue
대기: in the wait queue
생성: in the job queue
문맥 교환 context switching
페이지 교체 알고리즘
페이지 교체 + 스왑 영역을 통해 제한된 메모리 영역을 효율적으로 활용
- 사용자는 실제 메모리의 크기+스왑 영역의 크기 = 전체 메모리로 인식하고 사용
- Least Recently Used (LRU), Least Frequently Used (LFU)
초기 운영 체제의 디자인
- 특권 계층의 개념 없이 소프트웨어 스택과 하드웨어만으로 구분되었음
- Problem1: 애플리케이션이 다른 애플리케이션의 실행을 방해하거나 종료시킬 수 있음
- 원인: 모든 애플리케이션이 같은 도메인(domain)에서 실행
- 해결책: protection domain의 도입 (격리)
- 보호 경계 및 도메인의 선정 기준은 앞서 미리 정의한 abstraction인 프로세스!
- 프로세스의 메모리 영역에 대한 보호
가상 메모리가 각 프로세스 별로 private하게 만듦
문맥 교환이 일어날 시에 가상 메모리 영역 또한 switch
- 프로세스에서 접근하는 파일에 대한 보호
권한(Permission) 개념을 도입하여 파일들에 대한 접근을 보호
- Problem2: 애플리케이션이 OS 내 서브시스템(e.g., 시스템 서비스)를 crash 할 수 있음
- 원인: 같은 권한 계층에서 OS와 애플리케이션이 실행
- 해결책: Privilege separation (리눅스 커널의 ring 0 – ring 3)
운영체제만이 특권 계층의 명령어를 실행할 수 있음
x86 아키텍쳐 내 세그먼트 기술자(segment descriptor)의 Descriptor Privilege Level (DPL) bits
'[ Laboratory ] > Advanced Operating System' 카테고리의 다른 글
[Linux Kernel] 리눅스 커널 버전 변경 빌드 (3) | 2024.10.19 |
---|---|
[5급 전산직/운영체제론] 2023년 2차 운영체제론 제2문 (1) | 2024.07.28 |
[5급 전산직/운영체제론] 2024년 2차 운영체제론 제4문 (0) | 2024.07.28 |