-> 내부에서는 어떤 과정들이 일어나는지 배움(개발자 측면)
2가지 관점으로 생각함
- On-disk structure – 어떻게 메모리에 파일이 저장되는지 나타내는 구조(여기가 주임)
- In-memory structure – 컴퓨터가 켜졌을 때 실행되는 파일을 나타내는 구조
On-disk structure
- Master Boot Record - 하드디스크 하나가 있으면 부팅을 하는 메인디스크의 섹터 0에 master boot record라는 것이 들어가 있고 여기에 boot load(운영체제 소프트웨어를 메모리에 올려두는 것)라는 것이 존재함 -> 어떠한 boot record를 실행할 것인지 확인함, 어떤 파티션을 active시킬 것인지 결정을 함 -> 메모리에 올려놓고 사용함
-loader -> 프로그램을 메모리에 올려놓는 것
파티션 별로 다른 OS를 설치하여 사용할 수 있음
-Boot Record -> 프로그램이 메모리에 저장되는 곳
- boot block(각 파티션에 가장위에 위치함) – 운영체제가 깔려있는 곳
- super block(파티션의 파일시스템에 대한 전반적인 정보를 담고 있음, 윈도우에서는 부트 섹션이라고 함, 윈도우에선 마스터 파일 프레임이라고 함) – 파일시스템에 메타데이터를 포함한 여러 가지 설정데이터가 들어가 있음(type, # blocks(1개 block이 4KB임, read, write할 때 사용하는 단위) - block이 하드디스크에 몇 개가 있는지 표현함 – 총 데이터양을 4KB로 나눠줌, etc.)
- bitmaps – 어떠한 디스크 block이 사용되고 있는 지나타냄(free space를 관리함)
- i-nodes – 파일의 구조, 메타데이터를 저장하고 있는 block임(파일이 생성될 때마다 생성됨)
- root dir – 파일시스템을 만들면 가장상위 단에 만들어지는 디렉토리 무조건 하나씩 생성됨.
- files & directories(data block) - 실제로 데이터가 파일의 형태로 저장되는 공간임
>>여기에 나와 있는 단어들은 유닉스 기준임
>>하드디스크 구조는 이런 식으로 block이 나뉘어서 구성이 되어있다.
파일시스템은 On-disk structure, In-memory structure(read, write를 할 때 어떻게 지원을 해줄지에 대한 구조임)로 구성되어 있음.
프로세스에서는 명령어만 주어짐 -> 처리는 실제로 운영체제가 함 -> 운영체제에는 system-wide open-file table를 관리를 하고 프로세스에서는 프로세스 별로 자기가 오픈하는 파일의 파일 descriptor라는 것을 관리를 해서 테이블 엔트리에서 요청한 파일을 system-wide open-file table에서 하나만 가리키도록 되어있음. -> 누가 어떤 것을 요청했는지만 알려줌
-> 초록색들은 캐시메모리임 -> 원래는 디스크에 있는 것임(디스크에서 데이터를 불러오는 일은 오래 걸리는 작업이기 때문에 디스크에서 자주 쓰이는 것을 미리 메모리에 올려서 사용하는 것 -> 성능이 훨씬 빨라짐) -> boot block, super block, bitmaps을 저장해 두었다가 캐시로 사용함
in-memory partition table -> boot block, super block, bitmaps에서 자주 사용하는 것을 모아둔 캐시메모리
directory cache -> 디렉토리에 대한 데이터 저장
buffer cache -> 일반파일에 대한 데이터 내용저장
>>위에 두 가지는 데이터에 대한 캐시인데 데이터에 대한 내용이 파일에 있는 내용이냐 아니면 디렉토리에 있는 내용인지 구분이 되어 캐시메모리에 저장이 됨.
>>캐시메모리를 사용한다면 데이터를 불러오는데 시간이 많이 단축됨.(자주 사용하는 데이터를 주로 저장함)
Virtual File Systems
요즘 운영체제는 파일시스템의 종류가 많음 -> 이러한 파일시스템은 서로 호환이 되지 않음.
Virtual File Systems - > 호환되지 않는 파일시스템을 위해 등장
Virtual File Systems(VFS) - 공통적인 부분을 묶어 놓은 것
그 밑에 수많은 파일 시스템을 위치시킴.
-> 파일시스템을 대부분은 사용가능하게 해줌
각기 다른 파일시스템들에 호환을 위해 생겨남 -> 똑같은 명령어로 실행을 할 수 있다.
File System Internals
Directory Implementation -> 데이터 블록들이 어떻게 변화되고 관리가 되는지
Directory Implementation(3가지)
- In the directory entry – 파일 이름과, 파일 정보를 한꺼번에 저장하고 있는 것
- In the separate data structure – 전부 저장하긴 복잡하니 파일이름만 저장해두고 포인터를 두어 파일정보가 들어있는 디스크블록과 연결해 두는 것
- hybrid approach – 파일에 대한 중요한 정보만 가지고 있는 방법(실제로 윈도우에서 사용)
File Control Block 구성
->파일에 대한 정보를 가지고 있는 Block(윈도우 기준, 유닉스 – I-nodes)
사실 5가지 말고도 많은 정보가 들어가 있음
Allocation Methods(어떻게 관리를 하고 어떻게 배치를 할 것인가? ) -> 메모리 관리와 유사 -> 얼마나 어떻게 할당할지
- Contiguous allocation – 연속적으로 block들을 저장함
- Linked allocation – 데이터를 랜덤하게 사용, 포인터 관리 테이블을 두는 것
- Indexed allocation
Contiguous Allocation예제
파일하나당 연속적인 블록으로 저장을 해둠(장단점이 공존함)
장점
>저장해야하는 정보 자체가 줄어 듦(처음 시작과 길이만 알면 불러올 수 있음)
>(기계적 장치인 하드디스크)연속적으로 배치되어 있기 때문에 read, write에 장점이 있음
ex. 디스크 조각모음을 통해 컴퓨터가 빨리지는 이유가 여기에 있음(연속적으로 합쳐주는 작업, SSD에는 조각모음이 필요 없음)
>기록하기 쉽다, 연속적 배치로 성능적으로 우수함(관리적인 측면에서 좋음)
단점
>외부단편화 문제가 발생할 수 있음(전제적으로 용량은 가능하지만 저장을 못함), 이용률에 단점이 있음 -> 앞에 저장된 파일이 시간에 따라 계속해서 커지게 되면 이후에 block들을 이동시켜 줘야하는 단점이 생김
Linked allocation –> 데이터를 블록마다 랜덤하게 씀, 포인터 관리 테이블을 두는 것(포인터대로 따라가면서 읽음)
장점
>데이터를 자유롭게 저장가능
단점
>파일 중간에 데이터를 읽고 싶을 때 파일전체를 끝까지 따라 가야하기 때문에 시간이 걸림
>데이터를 sequential로 저장할 때보다 성능이 떨어짐
>신뢰도의 문제가 있음(파일시스템은 데이터가 지워지게 되면 아주 큰 문제가 발생함.) -> 하나의 섹터가 불량이 됨(bad sector) 그러면 뒤에 있는 데이터도 읽지 못하게 만들어버림.(섹터단위가 512byte)
Indexed allocation – 파일이 어디에 있는지 인덱스(인덱스 블록을 만듦 -> 파일 컨트롤 블록에서 모두 저장을 하고 있음.)를 따로 관리해주는 것
>유닉스에서 이것을 I-nodes라고 함
>외부 단편화 문제는 해결되지만 인덱스 블록에 오버헤드가 많긴 함, 그러나 장점이 더 크기 때문에 이 방법을 사용함
유닉스 기준
direct block(기본적), single indirect(1024블록추가 가능), double indirect 순서로 초과하게 되면 저장이 된다.
>>앞에 블록을 초과하게 되면 뒤에 블록을 추가해서 저장이 됨.
/(슬래시)가 루트폴더임
bin - 폴더이름
a out이라는 파일을 불러오고 싶은 것임
가장 먼저 탐색을 하는 것이 /(슬래시)부분임. -> 디렉토리 테이블 안에 있는 정보를 탐색함.
-> 이 안에 bin이라는 폴더를 탐색해 들어감 -> 그 안에 디렉토리 11000을 파일 리스트가 나옴(옆에 블록의 번호가 나와 있음)
650번은 현재 block이 부족해서 추가적으로 single indirect block에서 불러오는 것임
이 위에 것들은 direct block에서 정보를 불러옴.
Free-Space Management – bitmap block의 관리를 받음
->bit[i]에 1이 들어가 있으면 사용 중이지 않은 부분임
0이면 사용 중인 부분임을 나타냄
(주로사용 됨)
Linked Free Space List on Disk - Linked List를 통해서 사용 중인 것과 아닌 것을 구분해 주는 방식임 (최근에는 많이 사용하지 않음, 단점이 큼)
단점 – 중간에 포인터에 손상이 생기면 뒤에 있는 데이터들이 모두 날아감.
Efficiency and Performance(효율적 성능적 측면)
앞에서 설명함
Buffer(어떤 것을 임시로 저장해두는 공간) Cache
-> 동영상을 볼 때 버퍼링 걸리는 것 -> 동영상을 끊임없이 보려면 버퍼라는 공간에 데이터를 미리 넣어두어 원만한 재생을 하게 해주는 것
-> 데이터 RAM(주기억장치) 안에 위치해 있음 -> 하드디스크에 있는 것x
Buffer Cache
IO디바이스 컨트롤러(이 안에도 조그마한 버퍼가 존재함)를 거쳐 I/O 디바이스로 넘어감
Read-Ahead(미리)
-> 100번째 블록을 불러 올 때 인접해있는 99번과 101번을 같이 불러오는 것 -> 효율성이 올라감
블록사이즈에 따라서 trade-off를 나타내는 그래프
x축 – 데이터크기(블록의 크기)
y축 – 사용률(활용도 측면)
Disk block이 커지면 커질수록 데이터 rate이 급격하게 올라감 -> 하드디스크에서는 데이터를 읽어야 할 때 디스크헤더가 이동을 하면서 읽음 -> 읽을 때 한꺼번에 읽어야지 더 많은 데이터를 읽을 수 있음 -> 디스크 블록 크기가 커지면 더 많은 정보를 가지고 올 수 있기 때문에 data rate(속도) 측면에서 올라가게 됨.
Disk space 활용성(공간의 활용성 ) 측면에서는 데이터블록 사이즈가 커지게 되면 내부단편화가 커지게 됨. -> 공간 활용도는 떨어짐
>>적정한 수준에서 타협을 하는 것이 좋음.
Recovery – 가장 중요한 이슈
Reliability
>Windows: scandisk
>UNIX: fsck
>>파일시스템의 이상을 지속적으로 확인함 -> 이상이 있으면 조치를 취함
Log Structured File Systems
Journaling file systems – 파일 시스템을 신뢰성 있게 만들기 위함 -> 명령어가 들어오면 그 명령어에 대한 로그를 하드디스크에 남김. -> 정상적으로 동작하면 로그를 지움
하드디스크에서 문제가 발생하면 로그를 남겨서 이를 추적하는 시스템
Network File System (NFS) - PC 하드디스크에 있는 저장소가 다른 PC에 있는 하드디스크가 PC에 있는 것처럼 똑같이 동작을 하는 시스템
Network File System (NFS) 구조
-> 클라이언트와 서버가 구분되어 접근이 이루어짐.
'👨💻Computer Science > 운영체제[OS]' 카테고리의 다른 글
[운영체제] 13장 I/O Systems (0) | 2021.06.29 |
---|---|
[운영체제] 12장 Secondary-Storage Architecture (0) | 2021.06.29 |
[운영체제] 10장 File System (0) | 2021.06.29 |
[운영체제] 9장 Virtual Memory Management (0) | 2021.06.29 |
[운영체제] 8장 Memory Management Strategies (0) | 2021.06.29 |
댓글