Three Easy Pieces (6) 썸네일형 리스트형 파일 시스템 구현 파일 시스템은 순수한 소프트웨어다. 다른 가상화들과 다르게 하드웨어가 필요하지 않다. 파일 시스템을 구현하는 다양한 방법이 존재하기 때문에 파일 시스템들이 서로 다른 자료 구조를 갖고 있으며 각각은 장단점이 있다. 파일 시스템에 대해 학습할 때, 두 가지 측면에서 접근하는 게 좋다 그중 하나가 자료구조이고 다른 하나는 접근 방법이다. 파일 시스템이 자신의 데이터와 메타데이터를 관리하기 위해 어떤 종류의 자료구조가 있어야 하는가? 그리고 프로세스가 호출하는 시스템 콜들과 파일 시스템의 자료구조와 어떤 관련이 있는지 어떤 자료구조들이 읽히는지 등을 알아야 한다. 파일 시스템의 자려 구조에 대해 디스크 상의 전체적인 구성을 개발하기 위해서는 디스크를 블록으로 나눠야 한다. 여기서는 단일 블록을 사용하고 크기는.. RAID 질문으로 시작하겠다. 대용량이면서 빠르고 신뢰할 수 있는 디스크를 어떻게 만들까?? 그래서 나온 게 RAID다. Redundant Array of Inexpensive Disk라고 하는데, 간단히 말해서 여러 개의 디스크를 조화롭게 사용하여 고속이면서 대용량의 신뢰할 수 있는 디스크 시스템을 만든다. RAID는 하나의 디스크처럼 행동한다. 용량이 많아지고 신뢰성도 올라간다. 그 이유는 여러 디스크에 중복된 것을 쓸 수 있으니까. 또한 이러한 장점을 transparently 하게 제공한다. 즉 소프트웨어의 변경 없이 디스크를 RAID로 변경 가능하다. 이제 인터페이스와 결함 모델을 살펴보고, 그 후 용량과 신뢰성 그리고 성능을 살펴보자. 파일 시스템이 RAID에 논리적 I/O를 요청하면 RAID는 내부에서.. 입/출력 장치 개념 I/O 장치 영속성 이야기 전에 입/출력 장치의 개념을 소개하고 운영체제가 이 장치들과 상호 작용하는 방법을 알아본다. 밑의 그림을 보면 CPU와 주메모리가 메모리 버스로 연결되어 있고, 몇 가지 장치들이 범용 I/O 버스에 연결이 되어 있다. 많은 현대 시스템에서는 PCI(많은 파생 버스)를 사용한다. 여기에 그래픽이나 다른 고성능 I/O 장치들이 연결되고 그 밑에 SCSI나 SATA 또는 USB 같은 주변장치용 버스가 있다. 여기서 디스크나 마우스 같은 느린 장치들이 연결된다, 가까울수록 고속화 버스를 사용하는데 여기에 고성능 장치들이 배치된다. 비용적인 문제 때문. 다음은 가상의 표준 장치를 살펴 보자 두 개의 중요한 요소가 있다. 첫 번째는 시스템의 다른 구성 요소에게 제공하는 하드웨어 인터페이스.. Threads 여기서는 몇 가지 기억에 남는 것들만 정리함. 먼저 대기하는 스레드가 조건을 검사할 때 if문 대신 while문을 사용하는데 이게 일반적으로 간단하고 안전하다. 예를 들어 pthread 라이브러리에서 변수를 제대로 갱신하지 않고 대기하던 스레드를 깨울 수 있다. 이런 경우 재검사를 하지 않는다면 대기하던 스레드는 조건이 변경되지 않더라도 변경되었다고 생각함. 때문에 컨디션 변수에서 시그널 도착은 변경 사실을 알리는 것이 아니라, 변경된 것 같으니 검사해 보라는 힌트 정도로 보는 것이 더 안전하다. 또한 컨디션 변수 사용하지 않고 간단하게 플래그 형식으로만 구현하면 굉장히 위험하다. 코드의 성능이 일단 좋지 않고, 오류 발생하기가 쉽다. lock 여러개의 명령어들을 원자적으로 실행해보고 싶지만 단일 프로세.. Virtual Memory 주소 변환의 원리 cpu와 마찬가지로 memory에서도 가상화 비슷한 전략을 추구한다. 제어와 효율성을 추구함. 프로그램을 다른 프로그램으로부터 보호하고 운영체제를 프로그램으로부터 보호하려면 하드웨어 도움이 필요함. 밑의 핵심문제를 보자 여기서 다루는 기법은 하드웨어-기반 주소 변환인데 짧게 주소 변환이라고도 한다. 가상 주소를 물리 주소로 변환하는 것. 주소 변환은 하드웨어가 하지만 하드웨어를 셋업 하기 위해 운영체제가 관여해야 함. 메모리의 빈 공간 사용 공간 등 알고 있어야 함. 먼저 가장 간단한 가정부터 시작함 사용자의 주소 공간이 물리 메모리에 연속적으로 배치되어야 한다고 가정. 또한 주소 공간은 물리 메모리 크기보다 작고, 주소 공간의 크기가 같다고 가정. 예시를 보면 프로그램 관점에서 0부터.. CPU 가상화 CPU를 가상화한다는 건 쉽게 말해서 여러 작업들이 동시에 실행되는 것처럼 보이도록 cpu 공유하게 함. 기본적인 아이디어는 돌아가면서 CPU 시간 나눠 쓰면 되는 거다. 여기서 2가지 문제가 발생 성능 저하랑 , 제어 문제 제어권을 상실하게 되면 한 프로세스가 영원히 실행권을 가질 수가 있다. 그래서 제한적 직접 실행(LDE) 이라는 기법이 있다. 말 그대로 cpu상에서 그냥 실행하는 거임 근데 여기서 문제 한 프로그램이 운영체제가 원치 않는 일을 하지 않는다는 보장이 있나, 그리고 운영체제가 어떻게 알고 원래 프로그램 중단하고 다른 프로세스로 바뀌는가. 자 그럼 해결해보자 일단 제한된 연산이라는 것은 커널 모드랑 유저 레벨 모드를 두어서 커널 모드에서 특수한 명령어만 실행하게 함. 여기서 시스템 콜들.. 이전 1 다음