CS/운영체제

CS/운영체제

[운영체제] 23. Disk Format & Arm Scheduling

Sector 구조 하드디스크의 하나의 섹터는 위와 같은 포맷으로 되어있다.우선 실제 데이터가 들어가는 부분이 제일 중요할 것이고 그 앞 뒤로는 부가 정보를 저장한다.데이터는 보통 512byte 크기가 저장된다. Preamble : bit pattern 으로 시작하며, 이 부분이 섹터의 시작임을 나타낸다.또한 실런더 넘버와 섹터 넘버와 같은 정보가 들어있다. ECC : Error-Correcting Code, read error 가 발생했을 때 복구할 수 있도록, 여분 정보가 저장되어 있다. 디스크에는 일부 섹터가 망가지는 것을 대비해서 여분의 spare sector를 남겨둔다.그리고 이와 같이 초기 세팅을 하는 것을 low-level formatting 이라고 한다.   Cylinder Skew (★) ..

CS/운영체제

[운영체제] 22. Disk & RAID

Hard Disk 하드디스크는 위 그림과 같이 여러 원판(플래터)이 겹겹이 쌓여있는 구조로 되어있다.그리고 원판의 앞/뒷 면에 데이터를 저장할 수 있다.이 원판이 쌓여있는 원통형 구조를 실린더라고 부른다. 플래터에서 데이터를 읽는 것은 헤드가 담당하며, 헤드는 디스크 arm 에 붙어있다.디스크 암은 좌우로 움직이면서 트랙을 이동할 수 있다.   플래터 하나는 여러개의 동심원으로 구성되어 있으며, 각각의 동심원으로 이루어진 영역을 트랙이라고 부른다.그리고 트랙은 중앙을 향하는 세로선에 의해 분할된 '섹터' 로 구성된다.왼쪽 그림을 보면 하드디스크 안쪽은 트랙당 섹터가 16개 이고, 바깥쪽은 트랙당 섹터가 32개로 되어있다.반지름의 길이가 달라지기 때문에 2가지 종류의 트랙으로 구성한 것이다. 오른쪽 그림은..

CS/운영체제

[운영체제] 21. I/O Device

입출력 장치입출력 장치는 크게 3가지로 분류할 수 있다. - Block Device : 고정된 크기의 블록에 데이터를 저장하는 장치. 각각의 블록은 주소를 가지며 주로 512KB ~ 323768KB 의 크기를 갖는다. 대표젹인 예시는 Disk - Character Device : 운영체제와 character stream을 주고 받는 장치. 블록 구조가 없기에 주소 체계도 없고, 무언가를 찾는 동작도 하지 않는다. 대표적인 예시는 프린터, 마우스, 네트워크 인터페이스 - Other device : 기타 장치들. 클락, Memory-mapped screens 등이 있다.    위 그림은 대표적인 입출력 장치들의 데이터 전송속도를 보여준다.아래로 내려갈수록 입출력 속도가 빨라지며, 사용자와 직접 상호작용하는 ..

CS/운영체제

[운영체제] 20. UNIX V7 File System

Directory Entry이제 파일 시스템의 예시로 UNIX V7 의 파일 시스템이 어떻게 구현되어 있는지 살펴보면서 파일 관련 내용 정리를 마무리한다.  UNIX V7 에서는 위와 같은 형태의 Directory Entry를 가진다.2바이트(=16 bit)는 I-Node 번호를 표현하는데 쓰이므로 총 2^16 가지의 번호를 표현할 수 있다.따라서 이 시스템에서 저장할 수 있는 최대 파일의 개수는 2^16개이다. (★)뒤의 14바이트는 파일 이름을 나타내는데 사용되었다. I-node  이번에는 UNIX V7에서 사용한 하나의 i-node의 구조를 살펴보자. (★)i-node 에는 파일의 속성이 들어있고, 그 밑에는 실제 파일의 content가 저장된 디스크 블록을 가리키는 주소가 들어있다.이때 V7 에서..

CS/운영체제

[운영체제] 19. 파일 시스템 구현

개요 위 그림은 전체 디스크를 나타낸 그림이다.디스크의 앞부분에는 MBR 이라는 부분이 있고, 그 뒤에 partition table 이 있다.파티션 테이블 뒤에는 파티션들이 존재하며, 각각의 파티션에는 실제 파일과 디렉토리가 저장되어 있다.이때 각 파티션은 독립된 하나의 파일 시스템을 갖는다. MBR(Master Boot Record)은 컴퓨터를 부팅할 때 사용한다.파티션 테이블의 엔트리 하나는 하나의 파티션과 매핑되어 있으며, 각 파티션의 시작 / 끝 주소 정보를 갖고 있다.파티션 중에 하나는 반드시 active 라는 마킹이 되어있고, 이 파티션이 부팅하는 파티션이다.(윈도우에서 운영체제가 들어있는 부팅 디스크를 지정하는 것과 비슷하게 생각하면 아해가 된다.) 컴퓨터를 부팅하는 과정을 살펴보면1. 롬에..

CS/운영체제

[운영체제] 18. File & Directory

File파일은 데이터를 장기 저장하는 저장 공간으로, 다음과 같은 특징을 갖는다. 1. 많은 양의 데이터를 저장할 수 있다.2. 저장된 데이터는 그 데이터를 사용한 프로세스가 종료되어도 남아있는다.3. 여러 프로세스가 동시에 데이터에 접근할 수 있다.  다음은 다양한 파일 확장자들의 예시를 보여준다.이중에서 gif는 무손실 압축을 지향하는 이미지 확장자이고, JPG는 압축률을 높이는 대신 어느 정도 손실을 감수하는 확장자이다.  파일의 내부 구조는 크게 위와 같이 3가지 종류가 있을 수 있다. (a)는 byte sequence 형태로 데이터를 저장한 것을 말한다.윈도우, UNIX와 같은 운영체제에서 이 방식을 지원한다. (b)는 Record Sequence 형태로 데이터를 저장한 형태이다.이때 레코드의 ..

CS/운영체제

[운영체제] 17. Segmentation

하나의 프로세스 크기가 너무 커서 메모리에 다 올리지 못할 때 가상 메모리를 이용하여 프로세스의 일부만 메모리에 올리는 방법을 사용한다. 그리고 이를 구체적으로 구현하는 방법으로 지금까지 페이징 기법을 살펴보았다.그런데 이를 구현하는 추가적인 방법으로 Segmentation 기법도 존재한다.  먼저 virtual address space 가 지금까지 배웠던 것처럼 위와 같이 존재한다고 해보자.그러면 가상 주소 공간은 0부터 점점 주소가 증가하는 1차원 주소 공간으로 존재할 것이다. 이때 이 공간에서 '컴파일러 프로그램'을 실행한다고 해보자.컴파일러는 소스코드를 파싱하고 심볼 테이블을 만들고, 파스 트리를 만드는 과정을 수행할 것이다.이때 이 과정에서 나온 결과물들을 저장해야 하는데, 각각을 segment..

CS/운영체제

[운영체제] 16. 페이지 교체 알고리즘

지난 글에서 프로세스를 메모리에 올리는 다양한 방법을 고민하면서, Virtual Memory 방식에 대해 정리하였다.하나의 프로그램 전체를 메모리에 올린 뒤 그때그때 실행할 프로그램을 교체하는 방식이 스와핑이었다면, 하나의 프로그램을 모두 메모리에 올리기에는 프로그램 용량이 너무 커서 다 못 올리는 경우 가상 메모리를 사용하여 프로그램이 사용하는 전체 메모리를 가상 공간에 표현하고, 가상 공간과 실제 메모리를 '페이지' 라는 단위로 매핑하여 그때 그때 필요한 가상 공간 영역을 실제 메모리에 올리는 방법을 사용했다. 이때 가상 공간 상 페이지 번호(virtual page number, VPN)와 실제 메모리 공간 속 페이지 (page frame number) 를 매핑하기 위해 페이지 테이블을 두었는데, 이..

CS/운영체제

[운영체제] 15. 메모리 관리

Memory & Process프로그래머가 원하는 이상적인 메모리는 용량도 크고, 입출력도 빠르고, 저장된 데이터도 망가지지 않는 메모리일 것이다.하지만 현실적으로 입출력이 빠른 메모리는 용량당 비용이 점점 높아지다보니, 용도에 맞춰 다양한 특징을 가진 메모리를 계층구조로 설계한다. 먼저 용량은 작지만 입출력이 빠르고 비싼 메모리는 cache 로 계층 상단에 두고중간 용량과 속도, 중간 가격대를 가진 메모리는 main memory 로 중간에 두고큰 용량과 낮은 속도, 싼 가격대를 가진 저장장치는 디스크 저장공간으로 제일 하단에 둔다. 메모리를 관리하는 memory manager 는 운영체제의 일부로서 메모리 계층 구조를 관리한다.또한 어떤 메모리의 어떤 부분이 사용되고 있고, 사용되지 않고 있는지 추적하며..

CS/운영체제

[운영체제] 14. 스레드 스케줄링

그림과 같이 스레드가 구현되어 있다고 해보자.(이 구현은 user level 스레드를 보여주고 있다. 런타임 시스템과 그 내부에 스레드 테이블이 있기 때문이다.) 이때 각각의 프로세스에게는 50ms 의 퀀텀이 주어졌고, 각 스레드는 CPU burst 마다 5ms의 시간이 소모된다고 해보자. 그러면 커널이 먼저 실행할 프로세스를 고르고, 그 다음에 런타임 시스템이 실행할 스레드를 골라서 굴리므로 프로세스 A의 스레드들이 A1 A2 A3 A1 A2 A3 이런식으로 돌아간다.유저 레벨 스레드는 스레드 스위칭이 빠르므로, thread_yield 와 같은 프로시저를 사용하여 빠르게 스레드를 교체하며 돌리는 것이 가능하고, 성능도 좋다. (다만 라운드 로빈과 같이 정해진 퀀텀을 정해두고 돌리는 것은 힘들다.) 이때..

에버듀
'CS/운영체제' 카테고리의 글 목록