분류 전체보기 56

[os-공룡책] 섹션12 - 보안

암호학을 배우지 않는이상, 정처기 이론에 나오는 보안 개념 수준이라 간단히만 정리했다. Security vs ProtectionSecurity: 외부 공격이나 침입으로부터 시스템을 지키는 것(인증: 누구인지 확인)Protection: 내부 자원을 권한에 따라 안전하게 관리하는 것(인가: 이 권한이 있는지 확인)핵심 원칙: 최소 권한 원칙(Least Privilege)Security Holes & ThreatsMalware: 트로이 목마, 랜섬웨어 등 시스템을 손상시키는 악성 소프트웨어Code Injection: 실행 중인 프로그램에 악의적 코드 주입Virus vs Worm: Virus는 파일 감염 필요, Worm은 네트워크 통해 스스로 번식Network Threats: Sniffing(데이터 도청), S..

[os-공룡책] 섹션11 - Storage, I/O

1. Mass Storage종류: HDD, SSD(NVM), Cloud Storage 등디스크 스케줄링: 디스크 헤드가 어떻게 움직일지 결정하는 규칙임FIFO: 온 순서대로 처리SCAN: 엘리베이터처럼 끝까지 갔다가 돌아오며 처리C-SCAN: 한쪽 방향으로만 가면서 처리 (더 균등한 대기 시간)핵심: 최신 SSD는 헤드가 없어서 이런 스케줄링보다 내부 컨트롤러의 최적화가 더 중요하다고한다.2. Redundancy (중복성)목적: 데이터 손실 방지 및 신뢰성 향상방법: RAID(디스크 묶기), Mirroring(똑같이 복사), Parity(복구용 데이터) 등을 통해 디스크 하나가 고장 나도 버틸 수 있게 함3. I/O 시스템구조: CPU와 디바이스 컨트롤러가 버스(PCIe 등)를 통해 데이터를 주고받음Me..

[os-공룡책] 섹션10 - 가상 메모리

1. 가상 메모리란프로세스를 메모리에 다 올리지 않아도 실행 가능하다즉, 프로그램이 메모리보다 커도 실행 가능Logical 주소 (CPU가 생성하는 주소)프로그램이 보는 주소(0부터 max까지 → code, data, heap, stack)MMU가 Logical → Physical(RAM) 주소로 변환공유 페이지 활용 가능 → shared library 등 여러 프로세스가 같은 코드 페이지를 공유Secondary Storage → Memory페이지 단위로 필요할 때만 가져옴(demand paging)관리는 valid-invalid bit, page table로 함최신 환경에서는 SSD I/O가 병목, Disk I/O 성능이 전체 성능에 큰 영향 2. Demand Paging 동작페이지 존재 확인: va..

[os-공룡책] 섹션9 - 메인 메모리

1. 메모리란?메모리는 byte들의 배열이고, 각 byte는 고유한 주소를 가짐CPU는 PC가 가리키는 주소에서 instruction을 fetch 해서 실행한다. 2. Memory Space 여러 프로세스가 동시에 메모리를 쓰는데 어떻게 침범을 안 할까?각 프로세스는 자기만의 주소 공간을 갖기 때문이다초기에는 base register ~ base + limit register(시작 주소 ~ 허용 범위)로 공간이 주어졌다.즉, cpu가 생성한 주소가 base 안에 들어오지 않았다면 segmentation fault가 뜨는 것이다.(옛날에 리눅스로 팀플할때 말도안되게 본 에러다)해당 검사는 CPU가 수행하며, user 모드에서 생성된 모든 주소가 이 과정을 거친다.memory protection 관점에서 ..

[os-공룡책] 섹션8 - Dead Lock

데드락은 OS 이론에서 시작했지만, 실무에서는 DB와 분산락에서 가장 자주 만난다고한다. 1. 데드락이란?여러 스레드(프로세스)가 자원을 하나씩 쥔 채 서로 기다리는 상태심은 락과 자원 획득 순서이다.2. 데드락 발생 조건아래 네 개 조건이 동시에 발생해야 데드락이 발생된다. Mutual Exclusion자원 동시에 공유 X예: mutex, DB row lockHold and Wait한 자원을 잡은 상태에서 다른 자원을 기다리는 경우No Preemption이미 누군가 잡은 자원을 강제로 뺏을 수 없음Circular Wait대기 관계가 원형 구조(아래와 같은 그림이다) 3. 데드락을 해결하는 방법?Mutual Exclusion(X)데드락은 누군가 자원을 독점해서 생기는 것인데, 독점 자체가 불가능하면(mu..

[os-공룡책] 섹션7 - Synchronization Tools

Concurrency Control 문제에 대해,,이번 섹션에서는 전 섹션에서 작성한 개념들의 예시들이었다. Race Condition, Critical Section, Mutual Exclusion 개념들의 공통점은 아래와 같다.1. 여러 실행 흐름이 동시에 실행2. 공유 자원에 접근3. 접근 순서가 보장되지 않으면 문제 발생 1. Concurrency Control의 대표 문제들1) Bounded Buffer 문제(Producer & Consumer)가~장 기본적인 동시성 문제라고한다. 문제 설정producer는 데이터 생성 후 버퍼에 넣음consumer는 버퍼에서 꺼내 읽음버퍼의 크기는 n으로 고정되며, 각 슬롯은 하나의 데이터만 저장producer와 consumer는 각각 독립적인 실행 단위(프로..

[os-공룡책] 섹션6 - Synchronization Tools

1. Cooperating 프로세스이게 뭐지 싶었다.근데 그냥 "서로 데이터 공유하거나 실행 결과에 영향을 주는 실행 단위"라고 한다 즉, 여러 실행 흐름이 같은 데이터에 동시 접근할 때, 실행 순서가 보장되지 않으면 데이터 일관성이 깨질 수 있다.예를들어 어떤 데이터를 LOAD -> ADD or MINUS -> STORE 하는 스레드가 있을 때, 더하고 빼는 순간에 ctx가 일어나서 원하는 값이 나오지 않을 수 있다.이거를 interleave 됐다고 하는데, 임의적인 순서로 마구 실행될 때 문제가 되는 것이다.이처럼 공유 데이터를 여러 실행 흐름(스레드)이 동시 접근하고, 실행 순서에 따라 결과가 달라지는 상황을 Race Condition이라고 한다. 그리고 얘는 원래 프로세스 단위 개념인데, 현대 시..

[os-공룡책] 섹션5 - CPU 스케줄링

1. 스케줄링이란?프로세스는 실행 동안 CPU만 쓰는 게 아니라, I/O을 기다리는 시간도 가진다.이 때, 패턴은 두개라고한다. 1) CPU burst- 실제로 CPU에서 명령어를 실행하는 구간 (running 상태) 2) I/O burst- 디스크, 네트워크 등을 기다리는 구간 (waiting → ready) 일반적인 시스템에서는(내가 생각하기엔 대부분?) CPU burst보다 I/O burst가 훨씬 자주 발생한다.그래서 os는 CPU를 놀리지 않고 계속 다른 프로세스에게 할당하는게 매우 중요하다. 즉, ready 상태의 프로세스들 중 누구한테 cpu를 줄 것인지가 핵심이다구현 방식은 fifo, priority queue 등 다양하다 2. preemptive vs non-preemptivecpu 스케..

[os-공룡책] 섹션4 - 스레드

1. 스레드란?프로세스는 자원 관리 단위, 스레드는 실제 실행 흐름 단위이다.하나의 프로세스는 여러 스레드를 가질 수 있고, 각 스레드들은 코드, 데이터, 힙 영역을 공유한다.대신 각 스레드는 자기만의 실행 상태를 가져야 하므로Program Counter, Register Set, Stack을 스레드마다 따로 가진다.이 때문에 스레드는 프로세스 전체를 복제하지 않고도 실행 흐름만 여러 개로 나눌 수 있다.그래서 스레드를 lightweight process(LWP) 라고 부른다. 또한 현대 소프트웨어가 대부분 멀티스레드 구조인 이유는 명확함- 응답성(Responsiveness)하나의 작업이 오래 걸려도, ;다른 스레드가 UI나 입력 처리 가능 - 자원 공유(Resource Sharing)프로세스 간 통신처..

[os-공룡책] 섹션3 - 프로세스

1. 프로세스란프로그램은 처음에는 디스크에 저장된 단순한 파일이다.이 상태의 프로그램은 CPU가 당연히 실행할 수 없다.CPU는 디스크에 있는 데이터를 직접 실행하지 못하고, 반드시 메모리에 올라와 있는 명령어만 실행할 수 있다. 그래서 프로그램을 실행하면 os는 해당 프로그램을 메모리에 로드한다. 하지만 단순히 코드만 메모리에 올리는 것으로는 실행이 불가능하다. 실행 중에는 메모리 공간, 열린 파일, 입출력 장치 같은 여러 자원이 필요하기 때문이다.운영체제는 이 실행에 필요한 자원들을 하나로 묶어서 관리하는데, 이렇게 실행 중인 프로그램과 그에 필요한 자원들의 묶음을 프로세스라고 한다.즉, 프로그램은 정적인 파일이고, 프로세스는 실행을 위해 준비된 동적인 존재다. 2. 프로세스 실행?프로세스가 메모리에..