[정보처리기사] 3-2. 디스크 스케줄링, 파일 시스템 등
* 자기 디스크의 구조
- 트랙: 하드디스크 표면의 동심원
- 섹터: 트랙을 쪼갠, 데이터가 저장되는 기본 단위
- 실린더: 회전축에서 동일한 거리에 있는 트랙의 집합
- 클러스터: 파일을 저장하는 논리적 단위로 몇 개의 섹터를 묶은 것
* 디스크 스케줄링
데이터 액세스를 위해 디스크 헤드의 이동 경로를 결정하는 방법.
1) FCFS (First Come First Service) = FIFO: 대기 큐에 먼저 들어온 트랙에 대한 요청을 먼저 처리. 구현이 쉽지만 Arm이 많이 움직여서 Seek Time이 증가
2) SSTF (Shortest Seek Time First): 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 처리. 가운데 트랙이랑 안/바깥쪽 트랙이랑 응답시간 편차가 크다. 너무 바깥쪽에 멀리 떨어져있으면 Starvation이 발생할 수도 있음.
3) SCAN: 현재 헤드 위치에서 진행 방향으로 쭉 돌면서 서비스를 처리하고, 끝에 도달하면 반대 방향으로. Starvation은 발생하지 않으나 Wait Time이 뒤죽박죽임.
4) C-SCAN (Circular SCAN): 그냥 SCAN하곤 달리 끝에 도달하면 거기서 반대방향으로 움직이는게 아니라 처음 위치로 돌아가서 다시 정방향 스캔을 한다. 그냥 SCAN보단 Fair함.
5) N-step SCAN: 스캔 시작 전까지 들어와있던 요청들에 대해서만 이번 스캔에서 처리하고, 도중에 들어온 요청들은 반대 방향으로 스캔할때 처리함.
6) Eschenbach 스케줄링: 각 실린더에 대해서 한번의 디스크팩 회전 시간 동안만 입출력 요청을 처리하는 기법?
7) LOOK / C-Lookup : 기본적으로 양쪽 끝을 왕복하는데, 움직이고 있는 방향 쪽에 더이상 요청이 없으면 끝까지 가는게 아니라 그 시점에서 방향을 틀어버리는 것. 예측을 위한 계산이 별도로 필요하다.
ex) 대기 큐에 [90, 183, 37, 122, 14, 128, 65, 67] 이라는 요청이 들어와있고 디스크 트랙의 범위는 [1, 200] 이라고 치자.
현재 디스크 헤드의 위치는 53이고 진행방향은 <- 였다면,
> SSTF: 53 -> 65 -> 67 -> 90 -> 122 -> 128 -> 183 -> 37 -> 14
> C-SCAN: 53 -> 37 -> 14 -> (1) -> (200) -> 183 -> 128 -> 122 -> 90 -> 67 -> 65
* 파일 시스템
보조기억장치의 파일들을 관리하는 기술.
파일을 CRUD하고, 파일에 대한 접근 제어 방법을 제공하고, 정보손실과 파괴를 방지하고 보안성을 제공하는 등의 역할
* 파일 디스크립터
- 파일이 액세스되는 동안 OS가 알아야 할 관리 정보들을 모아놓은 자료구조
- 파일 제어 블럭 (FCB) 이라고도 함
- 보조기억장치에 저장되어 있다가 파일이 open될 때 메인 메모리로 옮겨진다.
내용: 보조기억장치의 type, 파일 ID, 디스크 내 주소, 파일 크기, 사용횟수, 생성일, 삭제일, 수정일 등...
* 파일 구조의 종류
1) 순차 파일: 연속된 물리적 저장공간에 기록. 저장장치 효율은 높지만 검색 효율은 낮다.
2) 직접 파일: 직접 접근 기억장치의 물리 주소를 통해 직접 접근. 해시함수 등을 이용.
3) 색인 순차 파일: 순차파일 + 직접파일. 각 레코드가 키값에 따라 논리적으로 배열. 순차, 랜덤처리가 모두 가능하고 레코드 추가/삭제가 용이하다. 대신 Index 처리시간때문에 파일처리속도가 느림.
> 기본 영역: 데이터 저장 공간
> 색인 영역: 인덱스가 저장되는 공간
> 오버플로우 영역: 블록 내 레코드가 모두 사용되었을 때 연결시켜 추가 블록을 할당받기 위한 공간
* 디렉토리 구조
1) 1단계 구조 (Single-Level Directory): 디렉토리가 하나. 모든 파일들의 이름이 Unique해야 함
2) 2단계 구조 (Two-Level Directory): 유저정보-파일정보 쌍으로 관리되며 파일 공유가 어렵다
3) 트리 구조 (Tree-structured Directory): 대부분의 OS에서 사용되고 있는 구조. 다른 폴더라면 이름이 같아도 된다
4) 비주기 구조: 파일/디렉토리의 공유가 가능. 하나의 파일이나 디렉토리가 여러 경로 이름을 가질 수 있다. 공유 파일 제거시 Dangling Pointer 이슈 발생.
5) 일반 그래프형 구조 (General Graph Directory): 사이클이 허용되고 공유 문제를 해결.
* 자원 및 파일 보호 기법
- 자원 보호 기법
1) 접근 제어 행렬 (Access Control Matrix): 접근 주체와 객체를 행렬 형태로 표현해서 접근 가능성을 나타내는 것
2) 접근 제어 리스트 (- List): 객체를 기준으로 접근 리스트를 구성
3) 권한 리스트 (Capability List): 접근 제어 행렬의 각 행을 중심으로 구성, 즉 사용자 기준으로 자격을 나타낸 것
4) Lock-key 기법: 2) 와 3) 을 절충한 기법으로 영역별로 키값을 설정해서 접근 제어
5) 전역 테이블: 영역, 객체, 접근 권한을 필드명으로 적고 세 데이터를 순서대로 하나의 레코드씩 추가
- 파일 보호 기법
1) 파일 네이밍: 파일 이름을 다른 사용자가 알 수 없게 함
2) 비밀번호 설정: 말 그대로...
3) 암호화: 파일 내용을 암호화
4) 접근 제어: 사용자에 따라 서로 다른 접근 권한 부여 (chmod 같은)
* 보안
- 외부 보안: 물리적인 침입자나 천재지변 등으로부터 시스템을 보호하는 것
> 시설 보안, 운용 보안
- 내부 보안: 하드웨어나 OS에 내장된 보안 기능을 통해 신뢰성을 유지하고 시스템을 보호
- 사용자 인터페이스 보안: 사용자의 신원을 OS가 확인하는 절차를 통해 시스템을 보호
- 암호화
> 비밀키 시스템 (대칭키): 사용자가 많아지면 관리해야 할 키가 늘어난다. DES 등
> 공개키 시스템 (비대칭키): 관리할 키가 적지만 속도가 느리다. RSA 등
- 인증 교환 기법: 메시지가 변조되지 않았고 정당한 상대방으로부터 전달된 것임을 확인하는 기법
- 전자 서명 기법
* 멀티프로세서
하나의 시스템에 여러 프로세서가 있는 것. 각 프로세서들은 전용 기억 장치를 사용하지만 공동으로 사용하는 장치도 있다. 다수의 프로세서를 이용해 빠른 처리 가능.
- 프로세서 연결 방식
1) 시분할 공유 버스
> 각종 장치들을 단일 버스로 연결한 구조
> 장치 추가가 쉽고 경제적
> 각 장치들이 버스를 사용하기 위해 경쟁이 발생하면 효율이 떨어지며, 버스가 고장나면 전체 시스템에 장애
2) 크로스바 교환 행렬
> 버스 수를 메모리 수만큼 증가시킨 구조
> 장치 연결이 복잡해지지만 각 장치들이 서로 다른 경로로 정보 전송이 가능하다
3) 하이퍼큐브
> CPU의 수: 2^(CPU 연결점 수)
> 다수의 프로세서를 연결하고 확장성이 용이함. 대체로 경제적이나 프로세서가 많이 연결되면 비용이 급격히 증가
4) 다중 포트 기억장치
> 1) 방식과 2) 방식을 혼합한 방식. 다양한 연결 조합이 가능하나 전송 시간이 느리다.
- 멀티프로세서의 OS
1) Master/Slave 처리기
> 하나의 프로세서를 마스터, 나머지는 슬레이브로 지정.
> 슬레이브는 연산만 담당하며 I/O 발생시 마스터에게 요청한다.
2) 분리 수행 처리기
> 각 프로세서가 독자적인 운영체제를 수행하도록 구성, 인터럽트도 독립적으로 수행.
> 1) 방식과 달리 하나의 프로세서가 망가지더라도 전체 시스템이 다운되진 않는다.
3) 대칭적 처리기
> 여러 프로세서가 완전한 기능을 갖춘 하나의 운영체제를 공유하여 동시에 수행가능한 구조
> 복잡하지만 강력한 성능
* 프로세서 결합도
- Loosely-Coupled 시스템
> 각 프로세서마다 독립된 OS와 메모리를 가짐. 분산처리 시스템이라고도 한다.
> 각 시스템은 독립적으로 작동하며 메시지를 사용하여 상호 통신을 함
- Tightly-Coupled 시스템
> 하나의 OS가 모든 프로세서를 제어.
> 공유 메모리를 통해 프로세스간 통신을 한다. 저장 장치도 공유.
> 다중처리 시스템이라고도 함
> 공유 메모리를 잘 조율하는 방법이 필요
* 분산처리 시스템 (Distributed Processing System)
물리적으로 떨어져있는 시스템을 네트워크로 연결시켜 사용자에게 하나의 시스템인 것처럼 보이게 하는 것
약결합 (Loosely-Coupled) 시스템이라 볼 수 있다.
- 장점
> 투명성을 보장
> 다수 사용자의 데이터 공유 가능
> 시스템 확장이 용이
> 연산속도, 신뢰성, 가용성이 증가함
- 단점
> 설계와 소프트웨어 개발이 복잡해 구축 비용 증가
> 보안에 더 신경을 써야 함
- 투명성 (Transparency)
> 위치 투명성: HW, SW의 물리적 위치를 사용자가 알 필요가 없다
> 이주 (Migration) 투명성: 사용자나 App의 동작에 영향을 받지 않고 시스템 내의 객체를 이동 가능
> 복제 투명성: 시스템 안의 파일, 자원들의 복사가 자유로움
> 병행 투명성: 다중 사용자들이 자동으로 자원을 공유할 수 있음
- 분산 파일시스템
> 말 그대로 분산 시스템에서 파일 서비스를 제공하는 것
> 사용자는 장소에 구애받지 않고 같은 파일 시스템 구조에서 자신의 파일을 사용할 수 있다
> 다른 사용자간의 정보 공유가 쉬워짐
> NFS, LoCUS, Andrew 등이 있다
- 분산처리 시스템의 구조
> Star: 중앙 노드가 존재하는 형태. 중앙집중형이므로 관리 및 유지보수가 용이하나 중앙 노드가 뻗으면...
> Ring: 각 노드가 양옆의 두 노드와 물리적으로 연결됨.
> Tree: 노드가 트리 형태로 구성. 부모 노드가 고장나면 자식 노드들도 뻗는다.
> Network: 각 노드가 서로서로 모두 연결된 형태. 설치비용이 높지만 통신비용은 저렴.
> Multi-Access Bus Connection: 공유 버스 하나가 모든 노드와 연결. 노드의 추가/삭제가 용이하나 버스가 뻗으면...
* Unix 운영체제
- 유닉스 시스템의 구조
> 사용자
> 유틸리티: 사용자 프로그램
> 쉘 (Shell): 사용자와 시스템 간의 인터페이스이자 명령어 해석기
> 커널 (Kernel): 유닉스 시스템의 중심부로 메모리에 상주하면서 프로세스, I/O, 파일 관리 등을 담당하는 시스템 SW
> 하드웨어
- 유닉스 파일 시스템: 기본적으로 트리 구조
> 부트 블록: 부팅에 필요한 정보를 가지고 있는 블록
> 슈퍼 블록: 전체 파일시스템에 대한 정보를 가지고 있는 블록
> I-node 블록: 각 파일에 대한 정보 (메타데이터) 를 저장하고 있는 블록
> 데이터 블록: 실제 파일의 데이터를 저장하고 있는 블록
* 그 외 운영체제
- Windows
> GUI, 선점형 멀티태스킹
> FAT32 파일 시스템: File Allocation Table.
> PnP (플러그 앤 플레이): 하드웨어를 부착하면 자동으로 인식
> OLE (Object Linking and Embedding): 응용 프로그램간의 자료 공유
- MS-DOS
> CUI (Character User Interface)
> Single User, Single Tasking
> 트리 구조 파일 시스템
> 도스 명령어와 유닉스 명령어의 비교표
DOS | UNIX | 기능 |
ATTRIB | chmod | 파일 퍼미션 변경 |
CD | cd | 디렉토리 변경 |
CHDIR | cd | 디렉토리 변경 |
COPY | cp | 파일 복사 |
DEL | rm | 파일 삭제 |
DIR | ls | 디렉토리에 있는 파일 리스트 보기 |
FC- | comm / cmp | 파일 비교 |
TYPE | cat | 파일을 stdout으로 출력 |