반응형

운영체제(OS) 17

[OS] FSCK and Journaling

Disk Crash Scenario disk I/O 과정에서 crash가 발생하는 경우에 대해 살펴보자. 이미 존재하는 파일에 대해 새로운 데이터를 추가하는 경우에는 data bitmap, inodes, data block을 갱신해야한다. 위 세 가지 블록들에 대한 갱신은 원자적(atomic)으로 수행되어야하며, 이때 발생할 수 있는 crash 시나리오는 다음 6가지와 같다. ※ data bitmap과 inodes가 둘다 정상 갱신되거나 둘다 crash되면 consistent 상태로 다시 수행하면 문제를 해결할 수 있어 파일 시스템 상으로는 문제가 없지만 data bitmap과 inodes의 갱신 결과가 다른 경우 inconsistent한 상황이 되어 문제가 발생한다. 1. data block만 정상 갱..

운영체제(OS) 2022.12.08

[OS] RAID

RAID (Redundant Array of Independent Disks) 디스크의 성능 지표로는 성능(performance), 용량(capacity), 신뢰성(reliability)이 있는데 RAID는 다중 디스크를 사용하는 디스크 가상화 기술로 단일 디스크에 비해 성능, 용량, 신뢰성을 모두 향상시킨다. RAID 방식은 0 ~ 6까지 7개의 레벨로 구성되며 서로 계층적 관계는 없지만 다음 3가지 특성을 공유한다. 운영체제에 의해서 단일 논리적인 드라이브로 판단되는 물리적 디스크 드라이브의 집합 데이터는 배열의 물리적 드라이브에 스트라이핑(striping) 기법을 사용하여 분산 중복된 디스크 용량은 패리티 정보를 저장하는데 이는 데이터 복구를 보장하기 위함 두 번째와 세 번째 특성의 세부 사항들은 ..

운영체제(OS) 2022.12.08

[OS] Hard Disk, Disk Scheduling

하드 디스크의 구조에 관한 포스팅 [파일처리] 하드디스크(Hard Disk)의 구조 [파일처리] 하드디스크(Hard Disk)의 구조 하드디스크의 구조 (위에서 본 모습) (옆에서 본 모습) Platter - 데이터가 저장되는 곳, 즉 디스크를 말한다. - platter 여러 개가 겹쳐져있는 구조를 가진다. Spindle - 플래터를 회전시키는 역할을 한 sunho-doing.tistory.com disk I/O 소요 시간에 관한 포스팅 [파일처리] 하드디스크의 구조 - 디스크 액세스 비용 [파일처리] 하드디스크의 구조 - 디스크 액세스 비용 하드디스크에 데이터를 읽거나 쓰는 행위를 디스크 액세스(Disk Access)라고 한다. 디스크 액세스 비용 Seek time - Arm이 데이터가 있는 실린더로 ..

운영체제(OS) 2022.12.08

[OS] File System

파일 시스템 파일 시스템이란 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체계이다. 그 중 VSFS (Very Simple File System)의 구현에 대해 알아본다. Block 파일 하나가 필요로 하는 디스크의 최소 공간을 클러스터 또는 블록이라고 한다. 대개 블록 하나의 크기는 4KB이며 각 블록은 아래의 4가지로 분류된다. Super block - 파일 시스템의 전체 정보를 담는 블록으로 하나의 파일 시스템에 1개만 존재 Allocation structure block - inode 및 데이터에 대한 두 개의 비트맵 (free 0, used 1) Key meta data block - inode struct의 테이블이 저장됨 User data block - 실제..

운영체제(OS) 2022.12.07

[OS] pthread

pthread lib Unix 계열 POSIX 시스템에서 병렬적으로 작동하는 소프트웨어를 작성하기 위하여 제공하는 API 쓰레드의 생성, 소멸, 제어 등을 편하게 구현 가능 pthread 라이브러리를 링크하기 위해 컴파일 시 -lpthread를 옵션으로 넣어야 함 pthread 함수 쓰레드 생성 int pthread_create(pthread_t *thread, const pthread_attr_t *attri, void *(*start_routine)(void*), void *arg); ptrhead_t *thread - 함수를 실행할 쓰레드 변수의 포인터 const pthread_attr_t *attr - 쓰레드의 특성 void *(*start_routine)(void*) - 실행될 함수 void *..

운영체제(OS) 2022.12.06

[OS] Deadlock

데드락 (Deadlock) 데드락은 교착 상태라고도 부르며 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 무한히 기다리는 상태이다. 데드락의 발생조건 1. 상호 배제 - 한 순간에 한 프로세스만이 해당 자원을 사용할 수 있다. 2. 점유 대기 - 자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기해야 한다. 3. 비선점 - 이미 할당된 자원을 강제로 빼앗을 수 없다. 4. 환형 대기 - 자원 할당 그래프에서 환형(cycle)이 만들어진 경우 즉, 서로 다른 프로세스의 행동을 기다리는 상황이다. 1 ~ 3의 조건은 데드락의 필요 조건이다. 즉 어느 하나라도 충족하지 않으면 데드락은 발생하지 않으며 모든 조건이 충족되었다고 하더라도 무조건 데드락이 발생하는 것은..

운영체제(OS) 2022.12.05

[OS] Semaphore

세마포어 (Semaphore) - 범용 세마포어 세마포어는 공유된 자원의 데이터 혹은 임계영역 등에 여러 프로세스 혹은 쓰레드가 접근하는 것을 막아주는 기법이다. 기본적인 작동 원리는 한 프로세스가 특정 신호를 수신할 때까지 wait 하도록 강제하는 것으로 다음과 같은 연산들에 의해 동작한다. 1. semInit - 세마포어 변수를 음이 아닌 값으로 초기화를 수행한다. 2. semWait - 세마포어 변수 값을 감소시킨다. 만약 값이 음수가 되면 호출한 프로세스는 블록된다. 그 외에는 정상적으로 프로세스를 수행한다. 3. semSignal - 세마포어 변수 값을 증가시킨다. 만약 값이 양수가 아니면 semWait에 의해 블록된 프로세스들 중 하나를 깨운다. typedef struct{ int count;..

운영체제(OS) 2022.12.04

[OS] Lock

쓰레드는 서로 메모리를 공유하기 때문에 공통으로 사용하는 공유 변수가 존재한다. 여러 쓰레드가 모두 변수의 값을 read만 하는 경우에는 문제가 되지 않지만 특정 쓰레드가 변수의 값을 write 하게 되면 동기화 문제가 발생한다. 이를 해결하기 위해 한 쓰레드가 변수를 write 할 때에는 다른 쓰레드가 해당 변수에 접근할 수 없도록 lock 걸어주는 과정이 필요하며 lock부터 unlock 사이의 구간을 임계영역(critical section)이라고 한다. 임계 영역은 해당 영역 내의 명령어를 원자적으로 실행되도록 보장한다. ※ lock 관련 용어 임계영역(critical section) - 공유 자원에 접근해야하는 각 프로세스의 코드 영역으로, 다른 프로세스가 해당 영역을 수행하는 동안 수행되지 않아..

운영체제(OS) 2022.10.27

[OS] Concurrency

프로세스의 특성 OS에서 프로세스의 역할 중 첫 번째는 자원 소유의 단위이다. 자원이라는 것은 메모리, I/O device, 파일 시스템 등을 의미하며 프로세스마다 메모리에 서로 다른 공간을 할당하는 것이 그 예이다. 두 번째는 스케줄링의 단위이다. 문맥 교환은 프로세스 사이에 발생하면서 다음 실행될 프로세스를 선택한다. 하지만 이러한 프로세스의 두 가지 역할은 서로 독립적이다. 따라서 OS는 쓰레드라는 단위를 만들어 원래 프로세스가 하던 두 번째 역할인 스케줄링의 단위를 맡도록 정의하였다. Multi-thread OS가 하나의 프로세스 내에 여러 쓰레드를 지원하는 것을 다중 쓰레딩 (kernel-level multi thread) 이라고 한다. Window, Mac OS 등등 최신 운영체제는 모두 4사..

운영체제(OS) 2022.10.27

[OS] Page Placement Policy (페이지 배치 전략)

페이지 교체 정책 메모리의 모든 페이지 프레임이 사용되고 있는 상황에서 page fault가 일어나 새로운 페이지 프레임을 반입해야할 때, 교체 정책은 현재 적재되어있는 페이지 중 어떤 페이지를 교체시킬지를 결정한다. 모든 교체 정책의 목적은 교체되는 페이지가 가까운 미래에 참조될 가능성이 가장 적은 페이지가 되도록 하는 것이다. ※ 쓰레싱 (Thrashing) 쓰레싱이란 곧 사용될 페이지가 반출되는 일이 반복되는 현상으로 너무 잦은 page fault를 유발하여 I/O에 너무 많은 시간을 낭비하게 되는 경우가 발생한다. 따라서 합리적인 교체 정책을 채택하여 쓰레싱을 방지해야한다. 다양한 페이지 교체 정책 1. 최적 (Optimal) 미래에 참조될 때까지의 시간이 가장 긴 페이지를 교체 미래를 알아야하므..

운영체제(OS) 2022.10.26
반응형