Scribbling

운영체제 - 11 본문

Computer Science/Computer Knowledge

운영체제 - 11

focalpoint 2021. 11. 2. 12:19

 

1. 파일 시스템

1.1 파일 시스템

컴퓨터 시스템에는 다양한 종류의 파일이 있으며, 하드디스크 등의 저장장치에 보관된다. 보관 과정에서 사용자가 직접 개입하면 다른 사용자의 파일이 훼손되거나 저장장치 내부를 어지럽히는 등의 문제가 발생할 수 있다. 운영체제는 이를 방지하기 위해 사용자가 직접 파일을 보관하거나 접근하지 못하도록 한다. 대신 파일을 보관하고 관리하는 파일 관리자를 두는데, 이를 파일 시스템이라고 한다. 파일 시스템에서 파일 관리자는 사용자의 요청에 따라 파일을 저장하거나 읽을 수 있다. 파일 관리자는 파일 테이블을 사용하여 파일의 생성, 수정, 삭제 등을 수행한다. 사용자가 특정 파일에 접근하려면 파일 관리자로부터 권한을 획득해야 하는데, 이를 파일 디스크립터라고 한다.

 

1.2 파일 시스템의 기능

운영체제는 파일 테이블을 가지고 있다. 윈도우의 경우 FAT와 NTFS, 유닉스의 경우 I-node와 같은 파일 테이블을 유지한다. 파일 시스템은 사용자가 파일을 편리하게 관리할 수 있도록 디렉터리 기능을 제공하고, 수시로 조각 모음을 하여 파일을 관리하는 등의 작업을 수행한다.

 

1.3 파일 분류와 확장자

운영체제 입장에서 파일은 실행 파일과 데이터 파일로 구분된다.

- 실행 파일: 운영체제가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일이다.

- 데이터 파일: 스스로 프로세스가 될 수 없는 파일로, 운영체제는 보관만 할 뿐 특별하게 다루지 않는다.

컴퓨터에는 다양한 종류의 데이터 파일이 존재한다. 다양한 종류의 파일을 구별하기 위해 파일에는 헤더가 달려 있다. 파일 헤더에는 파일의 이름, 버전, 권한 등의 정보가 있으며, 각 파일은 각각 고유한 헤더를 가진다.

윈도우에서 실행 파일을 더블 클릭하면 프로세스가 생성되어 실행된다. 반면 데이터 파일을 더블클릭하면 해당 파일을 사용하는 응용 프로그램(연결 프로그램)이 실행된다. 예컨대 .jpg 파일을 실행하면 해당 데이터 파일이 실행되는 것이 아닌, 연결 프로그램인 이미지 뷰어 프로그램이 실행되고, 운영체제가 해당 데이터 파일을 뷰어 프로그램에 넘겨준다.

 

1.4 파일 속성

파일 속성은 각 파일 헤더에 기록되며, 운영체제는 이러한 파일 헤더를 파일 테이블에서 관리한다.

- 파일 헤더: 파일 테이블에서 관리하며 파일의 이름, 종류, 크기, 시간 등의 일반적 내용이 담겨 있다.

- 고유 헤더: 데이터 파일에는 응용 프로그램이 필요로 하는 고유 헤더가 따로 달려 있다.

 

1.5 파일 구조

A. 순차적 파일 구조

일반 파일은 기본적으로 순차 파일 구조이다. 사용자가 파일 작업을 하려면 open() 또는 create() 명령을 사용하여 운영체제로부터 이용 권한을 획득해야 한다. 운영체제는 파일 디스크립터를 사용자에게 주는데, 이 파일 디스크립터는 파일의 맨 앞에 위치한다. 사용자가 read() 또는 write() 명령을 내리면 파일 디스크립터는 계속 전진하며, 파일 디스크립터를 lseek()를 통해 이동시킬 수 있다.

B. 인덱스 파일 구조

순차 파일 구조에서는 특정 데이터에 접근함에 있어 순차적으로 이동해야한다면, 인덱스 파일 구조는 순차 파일 구조에 인덱스 테이블을 추가하여 직접 접근 또한 가능하다. 즉, 인덱스 파일 구조는 순차 접근과 직접 접근이 모두 가능하다. 현대 파일 시스템은 인덱스 파일 구조로, 파일을 순차 파일 구조로 저장하고 접근시에는 인덱스 테이블을 이용하여 접근한다. 인덱스 파일 구조의 장점은 인덱스 테이블을 여러 개 만들어 다양한 접근이 가능하다는 것이다.

C. 직접 파일 구조

직접 파일 구조는 해시 함수를 이용한 방법이다. 데이터 접근은 매우 빠르지만, 데이터가 고르게 저장되도록 적정한 해시 함수를 찾아야만 한다.

 

2. 디렉터리 구조

2.1 디렉터리 파일

디렉터리도 파일이다. 일반 파일에 데이터가 담겨 있다면, 디렉터리에는 파일 정보가 다멱 있다. 디렉터리도 마찬가지로 헤더를 가진다. 디렉터리 헤더에는 디렉터리 이름, 만든 시간, 접근 권한 등의 정보가 기록된다.

현재의 디렉터리 구조는 그래프 구조이다.

 

3. 디스크 파일 할당

3.1 연속 할당과 불연속 할당

파일 시스템은 메인 메모리 시스템과 유사하다. 전체 디스크 공간을 고정된 크기로 나누고 각 공간에 주소를 붙여 관리한다. 각 공간 하나하나는 블록이며, 한 블록의 크기는 1~8KB 정도이다. 파일 시스템은 파일의 이름과 파일의 시작 블록 주소를 가진 파일 테이블을 관리한다.

- 연속 할당: 파일을 구성하는 데이터를 디스크상에 연속으로 배열하는 방식이나, 실제로는 사용하지 않는다.

- 불연속 할당: 비어있는 블록에 데이터를 분산하여 저장하고 이를 파일 시스템이 관리한다. 연결 할당과 인덱스 할당이 이에 해당된다.

A. 연결 할당

연결 할당은 파일에 속한 데이터를 연결 리스트로 관리한다. 윈도우의 FAT가 이에 해당된다. FAT는 파티션 전체(예컨대 C:) 블록에 대한 정보를 가진 테이블로, 열의 개수가 그 파티션에 존재하는 블록의 개수이다.

FAT는 버전에 따라 FAT12, FAT15, FAT32가 있다. FAT에 붙는 숫자는 파일 할당 주소의 최대 크기이다. 즉, FAT16의 최대 주소 크기는 2**16이다. 테이블을 이용한 방식의 단점은 테이블의 주소 크기에 따라 사용 가능한 디스크 용량이 제한될 수 있다는 점이다. FAT16은 16bit 주소를 사용하여 32GB크기 까지의 파티션을 지원가능하고, FAT32는 8TB까지의 파티션을 지원가능하지만 파일 하나의 크기가 4GB로 한정된다. 이러한 이유로 현재 윈도우 운영체제는 64bit 주소를 지원하는 NTFS 파일 시스템을 사용하고 있다.

* USB 메모리의 경우 대부분 FAT32를 사용한다. 때문에 4GB보다 큰 파일을 저장하려고 하면 빈 공간이 있어도 '빈 공간 없음'이라는 메시지가 뜬다. 이는 FAT32가 4GB 이상의 파일을 지원하지 않기 때문으로, USB를 포맷하고 NTFS 파일 시스템으로 바꾸면 된다.

 

B. 인덱스 할당

연결 할당은 구현이 용이하지만 파티션 크기나 파일 크기에 제약이 있다는 것이 문제이다. 인덱스 할당 방식은 이를 해결하기 위한 방식으로, 간접 인덱스 블록을 만들어 테이블을 무한히 확장한다. 유닉스의 I-Node가 이에 해당된다. I-Node 시스템은 파일 크기가 작은 경우 블록을 직접 연결하여 빠르게 접근하고, 파일의 크기가 큰 경우 인덱스 블록과 이를 연결하는 간접 포인터를 이용하여 확장한다.

- 파일 제어 블록: 파일 소유자와 속성을 나타낸다.

- 블록 포인터: 데이터가 있는 블록의 위치를 직접 연결하는 포인터이다.

- 간접 포인터: 파일의 크기가 다소 크면 블록 포인터만으로는 파일을 모두 가리킬 수 없다. 이 경우, 간접 포인터를 생성하여 인덱스 블록을 가리키는 방식을 사용한다.

- 이중/삼중 간접 포인터: 인덱스 블록 하나는 256개의 블록을 지정 가능하다.

 

3.2 디스크의 빈 공간 관리

디스크는 같은 크기의 블록으로 나뉘며 블록 하나의 크기는 1~8KB이다. 블록의 크기를 정하는 것은 내부/외부 단편화 문제와 관련된다. 아래 그림은 윈도우 운영체제의 파일 속성으로, 파일 크기와 디스크 할당 크기가 다른 것을 확인할 수 있다. 이는 내부 단편화 문제를 보여준다.

디스크에 파일을 저장할 때 모든 테이블을 다 뒤져서 빈 공간을 찾는 것은 매우 비효율적이다. 이를 해결하기 위해, 파일 시스템은 빈 블록 리스트를 따로 관리한다.

 

4. 유닉스 파일의 특징

윈도우의 경우 실행 파일 확장자가 .com 또는 .exe로 정해져 있지만, 유닉스에는 실행 파일 확장자가 따로 없다. 따라서 유닉스에서는 실행 파일을 접근 패턴으로 구분한다. 아래 그림은 유닉스 파일 접근 패턴을 나타낸다. 접근 패턴의 맨 앞자리는 파일의 종류로, -는 일반 파일, d는 디렉터리, l은 링크를 뜻한다. 여기서 링크는 윈도우의 바로가기에 해당된다. 접근 패턴의 다음 9자리는 다시 3자리씩 구분되어, 각각 소유자, 소유자가 속한 그룹, 제삼자의 권한을 나타낸다. 여기서 r은 read, w는 write, x는 execute 권한을 의미한다.

유닉스는 접근패턴에 x가 존재하면 해당 파일을 실행 가능한 파일로 인식한다. 유닉스에서는 chmod 명령으로 접근 패턴을 변경할 수 있다. 접근 패턴에 숫자를 부여하여 변경하는데, read는4, write는2, execute는 1이며 chmod 명령을 이용하여 살리고 싶은 숫자를 모두 더하면 된다. 예컨대 chmod 777은 (4+2+1)(4+2+1)(4+2+1)을 의미하여 모든 권한을 살리라는 의미이고, chmod 764는 (4+2+1)(4+2)(4+0+0)은 각 그룹별로 (모든 권한),(읽기/쓰기)(읽기) 권한을 부여한다.

 

'Computer Science > Computer Knowledge' 카테고리의 다른 글

Docker Basics  (0) 2022.10.05
운영체제 - 12  (0) 2021.11.03
운영체제 - 10  (0) 2021.10.31
운영체제 - 9  (0) 2021.10.22
운영체제 - 8  (0) 2021.10.20