목록CS/운영체제 (21)
빙응의 공부 블로그

📝서론 이번 장에서는 영속 저장 장치라고 하는 또 하나의 핵심적인 가상화 퍼즐을 알아보자. 하드 디스크 드라이브 또는 좀 더 최근의 솔리드 스테이트 드라이브(SSD)와 같은 저장 장치는 영구적으로 정보를 저장한다.전원 공급이 차단 되어도 그대로 데이터를 보존하며 운영체제는 이러한 장치를 더 신중히 다뤄야한다. 핵심 질문 : 어떻게 영속 장치를 관리하는가?운영체제는 어떻게 영속 장치를 관리할까?구현에서의 중요한 측면은 무엇일까 들어가기 앞서 우리는 Unix의 파일 시스템을 볼 것이다. 📝파일과 디렉터리저장 장치의 가상화에 대한 두 가지 주요 개념이 개발되었다.파일단순히 읽고 쓸 수 잇는 순차적인 바이트의 배열각 파일은 저수준의 이름을 갖고 있으며 보통 숫자로 표현되며 사용자는 알지 못한다.(아이노..

📝서론 이전 장에서는 I/O 장치 전반에 대한 개념과, 운영체제가 이러한 장치들과 어떻게 상호작용하는지 살펴보았다.이번 장에서는 특정 I/O 장치인 하드 디스크 드라이브(HDD)에 대해 좀 더 구체적으로 알아본다.핵심 질문디스크에 있는 데이터를 어떻게 저장하고 접근하는가?현대 디스크는 데이터를 어떻게 저장하는가?디스크 인터페이스는 어떤 방식으로 작동하는가?실제로 데이터는 어떻게 배치되고 접근되는가? 📝인터페이스 현대 디스크 드라이브의 인터페이스를 이해해보자.모든 현대 디스크 드라이브의 기본적인 인터페이스는 단순하며 규칙들이 존재한다. 드라이브는 읽고 쓸 수 있는 매우 많은 수의 블럭들로 이루어져 있다.디스크의 블럭들은 배열로 0부터 N-1까지의 주소 공간을 가진다.드라이브는 원자적으로 온전히 모두 완..

📝서론 영속성에 들어가기 앞서 먼저 입력/출력 장치의 개념을 알아보자 핵심질문 : 어떻게 I/O를 시스템에 통합할까?시스템에 I/O를 어떻게 통합해야 하는가?일반적인 방법은 무엇인가?어떻게 효율적으로 통합할 수 있을까? 📝시스템 구조 논의를 시작하기 위해, 위의 시스템 구조를 살펴보자 이 그림에서는 CPU와 주메모리가 메모리 버스로 연결되어 있다.몇 가지 장치들은 범용 I/O 버스에 연결되어 있다.또한 현대의 많은 시스템들은 PCI(메인보드 연결 인터페이스)를 사용하고 있다. 마지막으로 아래의 SCSI나 SATA 또는 USB와 같은 주변장치용 버스가 있다.버스 이름속도연결 장치특징메모리 버스가장 빠름CPU ↔ RAM고속, 고가, 짧은 거리PCI / PCIe (고속 I/O 버스)빠름그래픽카드, SSD,..

📝서론 이제까지 쓰레드를 중심으로 병행 프로그램을 설명하였다. 인터넷 서버에서는 다른 스타일로 병행 프로그래밍을 하기도 한다. 이런 스타일을 이벤트 기반의 병행성이라고 부른다.예를 들어보면 node.js나 스프링의 WebFlux 같은 것들이다. 물론 시작점은 C와 유닉스 시스템이다. 핵심 질문 : 어떻게 스레드 없이 병행 서버를 개발할까? 📝기본 개념 : 이벤트 루프우리가 다룰 이벤트 기반 병행성은 특정 사건(이벤트)의 발생을 대기한다. 즉 사건이 발생하면, 사건의 종류를 파악한 후 I/O를 요청하고 추후 처리를 위해 다른 이벤트를 발생시킨다. 이게 전부다. 이제 이벤트 루프에 대해 알아보자while (1) { events = getEvents(); for (e in events) { proce..

📝서론 우리는 그동안 교착 상태에 초점을 맞춰서 오류를 해결했다.핵심 질문 : 일반적인 병행성 관련 오류들은 어떻게 처리하는가? 📝비 교착 상태 오류 원자성 위반 오류 "다수의 메모리 참조 연산들 간에 있어 예상했던 직렬성이 보장되지 않았다." 즉 코드의 일부에 원자성이 요구되었으나, 실행 시에 그 원자성이 위반되었다는 오류이다. 해결방법은 간단하게도, 락을 추가하여 원자성이 보장되어야 하는 부분에 락 변수를 획득하도록 하면 된다. 순서 위반 오류 "두 개의(그룹의) 메모리 참조 간의 순서가 바뀌었다."즉, A가 항상 B보다 먼저 실행되어야 하지만 실행 중에 그 순서가 지켜지지 않았다.해결방법은 또한 간단하다. 순서를 강제하면 된다. 컨디션 변수를 사용하면 된다. 📝교착 상태 오류 앞서 다룬 병..

📝서론 다양한 범주의 병행성 문제 해결을 위해서는 락과 조건 변수가 모두 필요하다.이번 장에서는 세마포어라는 동기화 기법을 알아보자 핵심 질문: 세마포어를 어떻게 사용하는가 락과 컨디션 변수 대신에 세마포어를 사용하는 방법은 무엇인가?세마포어의 정의는 무엇인가?이진 세마포어는 무엇인가?락과 컨디션 변수를 사용하여 세마포어를 만드는 것이 가능한가?그 반대로 세마포어를 사용하여 락과 조건 변수를 만드는 것이 가능한가? 📝세마포어 : 정의세마포어는 정수 값을 갖는 객체로서 두 개의 루틴으로 조작할 수 있다. POSIX 표준에서 이 두개의 루틴은 sem_wait()과 sem_post()이다. 세마포어는 초기값에 의해 동작이 결정되기에 사용전에 제일 먼저 값을 초기화해야한다. #include sem_ts..