득이공간

[운영체제] 4장. I/O Device 관리 본문

CS/운영체제

[운영체제] 4장. I/O Device 관리

쟁득 2024. 2. 24. 14:12
해당 게시물은 조진성 교수님의 '운영체제' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 4장. I/O Device 관리

4-1. Mass-Storage Structure
4-2. I/O Systems
4-3. File System Interface
4-4. FIle System Implementation
4-5. File System Internals


📌 4-1. Mass-Storage Structure

* Mass-Storage (secondary storage)

- computer I/O 장치 중에 제일 중요한 장치다.
- HDD (Hard Disk Drive) : 
- SSD (Solid State Disk)
- RAM disk : 전원을 껐다가 키면 데이터가 다 날라간다.
- Magnetic tape : 주로 데이터 백업 용도로 사용되고 있다.


* Disk Attachment
- Host attached via an I/O port
- Network attached via a network connection


* Network-Attached Storage (NAS)
- File-level access
NAS, NAS - LAN/WAN - client, client


* Storage-Area Network (SAN)
- 데이터센터 내에 존재하는 서버, NAS의 일종
- Block-level access
- 서버를 하나의 큰 디스크로 생각한다.
- Fibre channel을 통해 client와 연결된다.


* Storage Architecture
Block File
Non-IP IDE/SCSI DAFS
Networks SAN
IP NBD NAS
Networks iSCSI


* HDD
- 구성 : platters, surfaces, tracks, sectors, cylinders, arm, head (여러개의 platter, surface에 똑같은 track을 이은 것을 Cylinder라고 한다.)
- 1. Seek : moving the disk arm to the correct cylinder
- 2. Rotation : waiting for the sector to rotate under head
- 3. Transfer : transferring data from surface into disk controller, sending it back to the host


* Disk scheduling

- 더 효율적으로 성능을 높여주는 알고리즘. seek가 시간이 가장 오래걸리는 동작이라서 seek time을 최소화하는 것이 목표다.

* FCFS

- seek time을 고려하지 않았다.


* SSTF (Shortest Seek Time First)

- head의 위치에서 가장 가까운 cylinder부터 처리하면 seek time이 최소화되어서 성능이 좋아진다. SJF scheduling과 비슷하다. 일반적인 경우에 사용된다.


* SCAN (elevator algorithm)

- head를 한쪽방향으로 왔다 갔다 하면서 처리하도록 하는 알고리즘. Disk 요청이 아주 많은 경우에 사용된다. (ex. vod sever)


* C-SCAN

- 일반 SCAN알고리즘은 양 끝에 있는 cylinder는 늦게 처리되므로 왔다갔다 하지 않고 끝에서 끝으로 바로 이동하도록 하는 버전이다.


* C-LOOK

- C-SCAN에서 양 끝의 한계 지점을 정해놓는 버전이다.


* Disk Controllers
- Intelligent controllers
- Intelligent features : Read-ahead, Caching, Request reordering, Request retry on hardware failure, Bad block identification, Bad block remapping


* Swap-Space Management
- Swap-space : windows는 별도로 공간을 잡지 않고 관리한다. linux는 별도의 partition을 잡아놓고 관리한다.


* RAID
- Redundant Array of Inexpensive Disks : 비싸지 않은 여러개의 디스크를 동시에 관리함으로써 하나의 큰 디스크처럼 사용한다. 성능과 신뢰도를 모두 잡는다.
- reliability 신뢰도 향상
- Mirroring (shadowing) : 복사해서 두 배로 저장한다.
- parity or error-correcting codes : 용량을 줄이는 방법.
- performance 성능 향상
- Data striping : bit-level vs block-level
- HDD는 한 번 seek했을 때 많은 데이터를 읽어야 성능이 좋기 때문에 block-level striping이 더 성능이 좋다. concurrency를 이용. 여러 개의 요청을 각각의 디스크에서 처리.
- bit-level striping은 parallel을 이용. 하나의 요청을 모든 디스크가 처리.


* RAID Levels
- RAID 0
Non-redundant striping (no reliability)
secondary storage가 필요한데 데이터가 날라가도 문제 없고 성능이 중요하다. block-level striping (ex. vod sever)
- RAID 1
Mirrored disks
성능은 중요하지않고 여기있는 데이터가 날라가면 큰일난다. 그때 그때 복구할 수 있도록 Mirroring을 한다. no striping
- RAID 2 / 많이 안쓰임
Memory-style error-correcting codes (ECC)
하나의 block을 여러 개의 Disk에 나눠서 저장한다. 여러 개의 disk가 고장나도 ecc와 고장나지 않은 disk를 이용해 복구한다. bit-level striping
- RAID 3 / 많이 안쓰임
Bit-interleaved parity
하나의 block을 여러 개의 Disk에 나눠서 저장한다. 한 개의 disk가 고장나면 한 개의 parity와 고장나지 않은 disk를 이용해 복구한다. bit-level striping
- RAID 4
Block-interleaved parity
한 개의 disk가 고장나면 한 개의 parity를 이용해 복구한다. write할 경우 성능의 문제가 생긴다. disk를 업데이트할 때 parity 디스크를 계속 같이 업데이트 해야되기 때문이다. block-level striping.
- RAID 5
Block-interleaved distributed parity
한 개의 disk가 고장나면 한 개의 parity를 이용해 복구한다. parity 업데이트 요청도 여러 디스크로 분산되어 성능이 좋아진다. 일반적으로 사용된다. reliability는 어느정도, performance는 좋다. block-level striping.
- RAID 6
P+Q redundancy scheme
RAID 5에서 parity 디스크를 한 개 더 추가한다.
- RAID 0+1
Block-level striping and mirroring
- RAID 1+0
Mirroring and Block-level striping
0+1보다 성능이 우수하다.


📌 4-2. I/O Systems

* I/O operation
- I/O request via I/O instruction
Direct I/O vs Memory-mapped I/O
Communicates with registers in I/O controller
Typically, IR & DR
- I/O method
Programmed I/O
Interrupt
DMA


* Direct I/O
- 메모리의 address/instruction과 I/O의 address/instruction이 별도로 존재하는 HW 연결방식
- 성능과 다양한 I/O장치를 사용하는 intel CPU에서 사용하는 방식이다.


* Memory-Mapped I/O
- 메모리와 I/O의 address/instruction을 똑같이 놓는 HW 연결방식
- Arm, 모바일 프로세서에서 사용하는 방식이다.


* I/O Device Controller
- 작은 컴퓨터다.
- == host adapter
- CPU에서 받은 명령대로 I/O Device를 제어/동작하게 한다. 또는 interrupt를 CPU에게 전송한다.


* Kernel I/O Structure
- SW : kernel <-> kernel I/O subsystem <-> device driver
- HW : <-> device controller <-> device


* Goals of I/O Software
- Device independence
- Uniform naming
- Error handling
- Synchronous vs Asynchronous
- Buffering
- I/O 작업을 모아놓고 CPU가 한번에 처리하도록 하는 공간
- 성능적인 측면에서는 User space에서 구현하는 것이 우수하지만 I/O device 관련으로는 Kernel space에서 관리하는 것이 더 일반적이다.
- Spooling
- 애플리케이션에서 프린터로 보낼 데이터를 file로 만들어놓고 커널에서 프린터로 데이터를 천천히 내보내는 작업이다.
- Sharable vs dedicated device


* Interrupt Handlers (Linux device drivers)
- Critical actions
- Noncritical actions
- Noncritical deferred actions


📌 4-3. File System Interface

* File system
- files, directories, sharing, protection


* File structures
- Flat: byte sequence
- Structured: lines, fixed length records, variable length records


* File operation
- Unix/Linux: open, read, write, close


* File Types
- Windows: filename.extension
- Unix: no extension


* File Access
- Sequential access
- Direct access
- Record access
- Index access


* Directory operation
- Unix: opendir, readdir, closedir


* Pathname Translation
- Windows: GUI
- Unix: command input


* File System Mounting
- Windows: to drive letters (= C:\, D:\, ...)
- Unix/Linx: to an existing empty directory (= mount point)


* File Sharing - Remote File System
- Windows: CIFS
- Unix: NFS


* Protection
- Access Control Lists(ACLs): 파일별로 사용자들이 어떻게 작업을 할 수 있는지 나타낸다.
- Capabilities


* Access Lists in Unix/Linux
- Mode of access: read, write, execute
- Three classes of users(user/group/others)
- owner access (3 bit)
- group access (3 bit)
- public access (3 bit)


📌 4-4. FIle System Implementation

* File System Implementation
- In-memory structure
- On-disk structure


* In-memory structure
- kernel: open된 file을 관리하는 table
- per-process: process에서 open된 file descriptor table
- process가 실행되면 0~2번 index의 file이 항상 open 된다. 3번 부터 file desciptor tale.
0 standard input - 키보드 입력 전달
1 standard output - console 모니터에 출력
2 standard error - console 모니터에 출력
- buffer cache
  - directory cache
- buffer cache


* Virtual File System
- 각각의 file system 마다 공통으로 사용되는 부분들을 layer로 만들어 놓았다.
- Layered File System
application programs
logical file system
file-organization module
basic file system
I/O control
devices
- CD-ROM: ISO 9660
- Unix: UFS, FFS
- Windows: FAT, FAT32, NFTS
- Linux: Over 130 different file systems, Extended file system, ext2/3/4, Distributed file system
- New ones: ZFS, GoogleFS, Oracle ASM, FUSE, ...


* On-Disk Structure
- BIOS (Basic Input/Output System)
- UEFI (Unified Extensible Firmware Interface)
- MBR (Master Boot Record)
- GPT (GUID Partition Table)
- Disk Dirver (HDD, SSD)
MBR / GPT (boot loader partition table)
Partition 1 (active)
boot block
super block: file system metadata(type, # blocks)
bitmaps: data structure for free space mgmt.
i-nodes: file metadata (FCB)
root dir: 가장 첫 번째 데이터
files & directories
Partition 2
Partition 3


* Disk Block
- disk block number(cylinder, surface, track, sector)
- disk block이라는 단위로 file system을 관리한다.
- 4GB는 1M개의 disk block을 관리하고 number는 0~n-1까지다.


* Free-Space Management
- Bit vector or bit map (n blocks): 사용중인 블록을 한 비트씩으로 관리한다.
- Linked list (free list): 잘 사용되지 않는다.


* A Typical File Control Block
- i-node(UFS) or in master file table(NTFS)


📌 4-5. File System Internals

* Directory Implementation
- 방법 1 (directory entry): file name과 FCB를 저장한다.
- 방법 2 (separate): file name과 FCB의 위치(i-node)를 저장한다. Unix/Linux가 사용하는 방법이다.
- 방법 3 (hybrid approach): file name과 FCB의 위치와 중요한 FCB 정보를 저장한다. Windows가 사용하는 방법이다.


* Allocation Methods

- disk block을 hard disk에 어떻게 배치할 것인가?

 

* Contiguous allocation
- file, start, length
- FCB에 표기하기 쉽다.
- dynamic에는 적합하지 않다.
- 읽기 전용일 때 사용된다. ex. CD-ROM


* Linked allocation
- file, start, end
- dynamic에 적합하다.
- FCB에 표기하기 쉽다.
- pointer 유지에 따른 overhead가 있다.
- disk block 하나가 손실되면 모두 사용할 수 없게 된다. reliability에 문제가 크다.
- Random Access하려면 필수적으로 처음부터 읽어야 하는 단점이 있다.
- 두 문제에 대한 해결방안으로 FAT(File-Allocation Table)에 따로 보관한다.


* Indexed allocation
- file, index block
- i-node: index-node
- Random Access 문제와 Reliability 문제를 해결한다.
- Combined Scheme: UFS (4K bytes per block, 32 bits addresses)

direct block: 48KB
single indirect: 4KBx1K = 4MB
double indirect: 4MBx1K = 4GB
triple indirect: 4GBx1K = 4TB


* UNIX File System (UFS) Structure
- /bin/a.out (실행 명령어 out)


* Block Size Performance vs Efficiency
- Block Size가 커지면 Data Rate이 늘어난다.
- Disk Space Utilization은 줄어든다. (internal fragmentation)
- SSD는 Disk space utilization만 고려하면 된다.


* Buffer Cache
- hard disk에서 자주 사용되는 것을 main memory에서 읽게 하는 것


* Caching Writes
- Synchronous write are very slow
- Asynchronous write (or write-behind, write-back)
- Unreliable


* Reliability
- File System Consistency
- Windows: scandisk
- UNIX: fsck


* Log Structured File Systems
- Windows: NTFS
- Journaling File Systems


* Remote File Systems
- Network FIle System (NFS)
- RPC, RMI
- NFS client -> RPC -> network -> RPC -> NFS server


'CS > 운영체제' 카테고리의 다른 글

[운영체제] 3장. Memory 관리  (1) 2024.02.24
[운영체제] 2장. CPU 관리  (0) 2024.02.07
[운영체제] 1장. OS 소개 (2)  (0) 2024.02.07
[운영체제] 1장. OS 소개 (1)  (2) 2024.02.04