본문 바로가기

CS

[CS 정리] 운영체제 (3)

파일 시스템

파일
보조 저장장치에 기록된 관련 정보의 정명된 집합, 사용자 관점에서 논리적 보조 저장장치의 가장 작은 할당 단위

접근 방법

순차 접근(Sequential Access)

파일의 정보가 레코드 순서대로 차례대로 처리되는 것

가장 간단한 접근방법

 

읽기(read next) : 파일의 다음 부분을 차례대로 읽어나간다

쓰기(write next) : 파일의 끝에 추가, 새로운 파일의 끝으로 파일 포인터가 이동

직접 접근(Direct Access), 상대 접근

직접접근을 위해 파일은 고정 길이의 논리 레코드로 구성되고 특별한 순서없이 빠르게 레코드를 읽고 쓸 수 있다

디스크가 무작위 파일 블록에 임의적 접근을 허용하기 때문에 파일의 디스크 모델에 기반

14→53→7 등의 접근이 가능

 

읽거나 탐색할 블록을 결정하기 위해 주어진 이름에 대해 해시 함수를 사용하거나 작은 크기의 메모리 색인을 찾음

read next 대신 read n, write next 대신 write n을 제공하거나 position file to n 을 사용해 position file to n → read next 를 실행해 사용도 가능

 

디렉터리 구조

디렉터리
파일 이름을 해당 디렉터리 항목으로 변환해주는 심벌 테이블(symbol table)

 

1단계 디렉터리(Single-Level Directory)

모든 파일이 디렉터리 밑에 존재

 

파일이 많아지거나 다수의 사용자가 사용하는 시스템에서는 심각한 제약을 가짐

같은 디렉터리에 모든 파일이 존재하기 때문에 각 파일은 유일한 이름을 가져야한다

 

 

2단계 디렉터리(Two-Level Directory)

각 사용자는 자신만의 사용자 파일 디렉터리(UFD, User File Dirctory)를 가짐

각 디렉터리에는 오직 한 사용자의 파일만을 저장

사용자가 로그인하면 계정 번호나 사용자 이름으로 색인된 시스템의 마스터 파일 디렉터리(MFD, Master File Directory)가 먼저 탐색. 각 엔트리는 해당 사용자의 UFD를 가리킨다

사용자가 파일을 참조하면 사용자의 UFD에서만 탐색. UFD 내에서 파일 이름이 유일하다면, 다른 사용자들이 동일한 파일 이름을 가질 수 있다

 

한 사용자를 다른 사용자로부터 격리시켜 간단하게 다른 사용자 파일에 접근하는 것을 금지

 

높이가 2인 트리로 생각이 가능

MFD를 트리의 루트(root)로, UFD의 자손은 파일이자 단말노드

 

트리 구조 디렉터리(Tree-Structured Directories)

사용자들이 자신의 서브디렉터리(subdirectory)를 만들어 파일을 구성. 가장 일반적인 디렉터리 구조

하나의 루트 디렉터리를 가지며 시스템의 모든 파일은 고유한 경로 이름을 가짐

 

디렉터리는 파일과 서브 디렉터리의 집합을 포함. 디렉터리는 단순히 또 다른 파일이지만 특별하게 취급

 

 

 


 

디스크 스케줄링(Disk-Scheduling)

효율적인 스케줄링은 접근 시간과 대역폭(bandwidth,  단위 시간당 전송되는 총 바이트 수)을 모두 향상

 

선입 선처리 스케줄링(FCFS, First-Come-First-Out)

먼저 들어온 요청을 먼저 처리

본질적으로는 공평해 보이지만 빠른 서비스를 제공하지 못함

 

이동 : 53 → 98 → 183 → 37 → 122 → 14 → 124 65 → 67 (총 640 실린더 이동)

최소 탐색시간 우선 스케줄링(SSTF, Shortest-Seek-Time-First)

탐색 시간은 헤드가 경유하는 실린더 수에 따라 증가하기 때문에 현재 위치로부터 가장 가까운 요청을 우선 처리하는 것

 

이동 : 53 → 65 → 67 → 37 → 14 → 98 → 122 → 124 → 183 (총 236 실린더 이동)

FCFS에 비해 성능을 크게 향상. SJF(Shortest-Job-First)와 유사하지만 몇 개의 요청들이 매우 오래 기다리는 기아(starvation)발생 가능

SCAN 스케줄링

디스크 암이 한 끝에서 시작해 다른 끝으로 이동하며, 가는 길에 있는 요청을 모두 처리하는 것

헤드는 양쪽 끝을 반복해서 가로지르며 왕복

 

현재위치가 53이고, 0방향으로 이동 중

이동 : 53 → 37 → 14 → 65 → 67 → 98 → 122 → 124 → 183

 

C-SCAN 스케줄링(Circular-SCAN)

각 요청에 걸리는 시간을 균등하게 하기 위한 SCAN의 변형

한쪽 방향으로 헤드를 이동해가면서 요청을 처리한 후 끝에 다다르면 처음 시작했던 자리로 다시 되돌아가 서비스를 시작

 

LOOK 스케줄링

헤드를 각 방향으로 진행하다가 그 방향에서 기다리는 요청이 없을 경우 헤드의 이동 방향을 즉시 바꾸는 것

SCAN과 C-SCAN 스케줄링의 변형인 LOOK, C-LOOK이 존재

한 방향으로 계속 움직이기 전에 미리 요구가 있는지 확인

 

 

 

RAID

Redundant Array of Inexpensive/Independent Disk, 복수 배열 독립 디스크
저장장치를 여러개 묶어 고용량, 고성능 저장장치와 같은 효과를 얻기 위해 개발된 기법

 

과거에는 저렴한 디스크를 모아 고성능의 디스크처럼 사용하자는 생각이었지만 현재는 경제적인 이유보다 높은 신뢰성과 높은 데이터 전송율에 사용

 

장점

  • 중복을 통한 신뢰성 향상
    • 중복을 허용(미러링, mirroring)해 디스크 고장이 발생했을 경우 분실된 정보를 재구축하기 위해 사용해 디스크 고장이 발생하더라도 데이터가 분실되지 않음
  • 병렬성을 통한 성능 향상
    • 읽기 요청을 두 디스크 중 하나에서 처리할 수 있기 때문에 읽기 요청의 처리율은 2배가 된다
💡 미러링(mirroring)
하나의 논리 디스크는 두 개의 물리 디스크로 구성되고 모든 쓰기 작업은 두 디스크에서 모두 실행

RAID 레벨

미러링은 높은 신뢰성을 제공하지만 고비용, 스트라이핑은 높은 전송률을 제공하지만 신뢰성 향상 불가

패리티 비트와 디스크 스트라이핑을 결합해 적은 비용으로 중복을 허용하는 많은 기법이 제안되었고 각기 다른 가격 대비 성능을 보유

 


폴링과 인터럽트

폴링(Polling)

반복해서 루프를 돌며 특정 시그널이 들어왔는지 확인하는 것

특정 주기마다 확인하기 때문에 정확한 타이밍에 들어왔는지 확인하기 어렵지만 구현이 쉽다는 장점이 있다

인터럽트(Interrupts)

인터럽트 요청 라인이라고 불리는 선에 신호를 보내면 CPU가 알아차리고 레지스터 값과 상태 정보를 저장해 메모리 상의 인터럽트 핸들러 루틴으로 이동한 뒤 처리하고 다시 프로그램을 재시작

폴링에 비해 구현이 복잡하지만 시그널이 들어온 정확한 타이밍을 알 수 있어 반응이 빠르고, 발생시에만 처리하기 때문에 부하가 적다

 

 

직접 메모리 접근(DMA, Direct Access Memory)

CPU의 도움없이 자신이 직접 버스를 통해 명령을 액세스해 입출력을 하는 것

디스크처럼 많은 데이터를 입출력하는 장치를 위해 프로세서가 바이트를 매번 전송하는 것(PIO, Programmed IO)는 낭비이기 때문에 CPU의 PIO 작업 중 일부를 DMA 제어기에게 위임

CPU는 DMA에게 DMA 명령 블록의 주소를 알려주고 다른 일을 실행

 

 


📚 Reference

Abraham Silberschatz, 『Operating System Concepts』, 조유근, 홍릉과학출판사(2013)

 

'CS' 카테고리의 다른 글

[CS정리] 네트워크  (0) 2021.02.18
[CS 정리] 운영체제 (2)  (0) 2021.01.07
[CS 정리] 운영체제 (1)  (0) 2021.01.07