- 저자 : Abraham Silberschatz, Peter B. Galvin, Greg Gagne
- 출판사 : Wiley
- 발행처 : 퍼스트 북(First Book)
- OS 책 홈페이지 : https://www.os-book.com/OS10/
- 연습문제 정답
-
시간
- 매주 토요일 오후 9시
-
장소
-
발표 순서
- Tony -> 만보 -> 노베 -> 린 -> 무지
- 운영체제는 모든 컴퓨터 시스템의 필수적인 부분이다
- 이 책에서 다루고 있는 기본 개념과 알고리즘들은 공개 소스 운영체제와 사용 운영체제에서 자주 사용되는 것들에 기반을 두고 선정하였다
- Linux, Microsoft Windows, Apple macOS, Solaris, Android, iOS의 실례도 제시한다
- 이 교재는 10개의 주요 부분으로 구성되어 있다
- 1장과 2장은 운영체제란 무엇인지, 어떤 일을 하는지, 어떻게 설계되고 구축되는지를 설명한다
- 운영체제의 공통 특징이 무엇인지, 운영체제가 사용자를 위해 무엇을 하는지를 설명한다
- 이 장들은 자세한 내부 알고리즘 공부없이 운영체제가 무엇인지 배우기를 원하는 전공 지식수준이 낮은 학생이나 독자에 적합하다
- 3장부터 5장까지는 현대의 운영체제의 심장부로서 프로세스 개념과 병행성을 다룬다
프로세스
는 시스템의 작업 단위로서 시스템은병행하게
실행되는 프로세스의 집합으로 구성되는데- 일부는 시스템 코드를 실행하고
- 나머지는 사용자 코드를 실행한다
- 이 장들은 프로세스 스케줄링, 프로세스 간 통신을 위한 방법들을 제시한다
- 또한 이 장들에서는 스레드에 관한 논의뿐 아니라 다중 코어 시스템과 병령 프로그래밍과 관련된 주제에 대한 검토가 이루어진다
- 6장부터 8장까지는 프로세스 동기화 및 교착 상태 처리 방법에 대해 설명한다
- 프로세스 동기화의 적용 범위를 늘렸기 때문에 이전 5장(프로세스 동기화)를 6장 동기화 도구 및 7장 동기화 예제의 두 장으로 나누었다
- 9장과 10장은 프로세스가 실행되는 동안 메인 메모리를 어떻게 관리하는가에 대한 문제를 다룬다
- CPU의 효율적인 활용과 사용자에게 빠른 응답 시간을 보장하기 위해 컴퓨터는 한순간에 많은 프로세스를 메모리에 유지해야 하는 것이 필수적이다
- 메모리 관리에 관한 다양한 접근 방법을 반영하는 많은 종류의 메모리 관리 기법들이 존재하며 특정 알고리즘의 유효성은 상황에 따라 달라진다
- 11장과 12장은 현대 운영체제가 대용량 저장장치와 입출력을 어떻게 처리하는지에 관해 설명한다
- 컴퓨터 시스템에 부착되는 입출력 장치들의 종류가 매우 다양하고 응용(프로그램?)들이 이러한 장치들의 모든 측면을 관리할 수 있도록 광범위한 기능을 제공해야 한다
- I/O 시스템 설계, 인터페이스, 그리고 내부 시스템 구조 및 기능을 포함한 시스템 I/O를 깊이 있게 논의한다
- 여러 면에서 입출력 장치는 컴퓨터 시스템의 주요 구성요소 중에서 가장 느리게 동작하는 구성요소이다
- 장치들이 성능의 병목 지점으로 작용하기 때문에 입출력 장치들에 관한 성능문제들도 검토한다
- 13장부터 15장까지는 최신 컴퓨터 시스템에서 파일 시스템을 처리하는 방법에 대해 설명한다
- 파일 시스템은 데이터와 프로그램을 온라인으로 저장하고 접근하기 위한 기법을 제공한다
- 이 장들은 저장장치 관리를 위한 고전적인 내부 알고리즘들과 그 구조를 다룬다
- 또한 사용되는 알고리즘의 속성, 장점 및 단점에 대한 견고한 실질적인 이해를 제공한다
- 16장과 17장은 컴퓨터 시스템의 보안과 보호를 위해 필요한 기법들에 대해 논의한다
- 운영체제 내의 다양한 프로세스들은 다른 프로세스들의 활동으로 부터 보호되어야 한다
- 그런 보호를 제공하기 위해서 운영체제로부터 적절한 인가를 획득한 프로세스만이 파일, 메모리, CPU 및 다른 자원에 대해 연산을 하도록 보장해야 한다
- 보호는 프로그램, 프로세스, 또는 사용자들이 컴퓨터 시스템 자원에 대한 접근을 제어하기 위한 기법이다
- 이 기법은 시행될 제어를 지정할 방법과 이들을 강제하려는 방법을 제공해야 한다
- 보안은 인가되지 않은 접근, 악의적 파괴 또는 변경, 그리고 비일관성의 우연한 도입으로부터 시스템에 저장된 정보(데이터 및 코드 모두)의 일관성과 시스템의 물리 자원들을 보호한다
- 18장과 19장에서는 가상 머신과 네트워크/분산 시스템에 대해 논의한다
- 18장에서는 가상 머신과 그것의 최신 운영체제와의 관계에 대해 개괄적으로 설명한다
- 가상화를 가능하게 하는 하드웨어 및 소프트웨어 기술에 대한 일반적인 설명이 포함되어 있다
- 19장에서는 인터넷과 TCP/IP를 중심으로 컴퓨터 네트워크 및 본산 시스템에 대한 개요를 제공한다
- 20장과 21장은 두 개의 실제 운영체제인 Linux와 Windows 10에 대한 상세한 사례 연구를 제시한다
- 부록 A는 더는 사용되지 않는 오래된 영향력 있는 운영체제에 관해 설명한다
- 부록 B에서 D는 Windows7, BSD 및 Mach라는 세 가지 이전 운영체제를 자세히 다룬다
- 이 책은 C언어와 Java언어로 작성된 여러 예제 프로그램을 제공한다
- POSIX
- Java
- Windows 시스템
- 서문
- 1.1 운영체제가 할 일
- 1.2 컴퓨터 시스템의 구성
- 1.3 컴퓨터 시스템 구조
- 1.4 운영체제의 작동
- 1.5 자원 관리
- 1.6 보안과 보호
- 1.7 가상화
- 1.8 분산 시스템
- 1.9 커널 자료구조
- 1.10 계산 환경
- 1.11 무료 및 공개 소스 운영체제
- 1.12 요약, 연습문제, 추가 자료
- 2.1 운영체제 서비스
- 2.2 사용자와 운영체제 인터페이스
- 2.3 시스템 콜
- 2.4 시스템 서비스
- 2.5 링커와 로더
- 2.6 응용 프로그램이 운영체제마다 다른 이유
- 2.7 운영체제 설계 및 구현
- 2.8 운영체제 구조
- 2.9 운영체제 빌딩과 부팅
- 2.10 운영체제 디버깅
- 2.11 요약, 연습문제, 추가 자료
- 3.1 프로세스 개념
- 3.2 프로세스 스케쥴링
- 3.3 프로세스에 대한 연산
- 3.4 프로세스 간 통신
- 3.5 공유 메모리 시스템에서의 프로세스 간 통신
- 3.6 메세지 전달 시스템에서의 프로세스 간 통신
- 3.7 IPC 시스템의 사례
- 3.8 클라이언트 서버 환경에서 통신
- 3.9 요약, 연습문제, 추가 자료
- 4.1 개요
- 4.2 다중 코어 프로그래밍
- 4.3 다중 스레드 모델
- 4.4 스레드 라이브러리
- 4.5 암묵적 스레딩
- 4.6 스레드와 관련된 문제들
- 4.7 운영체제 사례
- 4.8 요약, 연습문제, 추가 자료
- 5.1 기본 개념
- 5.2 스케줄링 기준
- 5.3 스케줄링 알고리즘
- 5.4 스레드 스케줄링
- 5.5 다중 처리기 스케줄링
- 5.6 실시간 CPU 스케줄링
- 5.7 운영체제 사례들
- 5.8 알고리즘의 평가
- 5.9 요약, 연습문제, 추가 자료
- 6.1 배경
- 6.2 임계구역 문제
- 6.3 Peterson의 해결안
- 6.4 동기화를 위한 하드웨어 지원
- 6.5 Mutex Locks
- 6.6 세마포
- 6.7 모니터
- 6.8 라이브니스
- 6.9 평가
- 6.10 요약, 연습문제, 추가 자료
- 7.1 고전적인 동기화 문제들
- 7.2 커널 안에서의 동기화
- 7.3 POSIX 동기화
- 7.4 Java에서의 동기화
- 7.5 대체 방안들
- 7.6 요약, 연습문제, 추가 자료
- 8.1 시스템 모델
- 8.2 다중 스레드 응용에서의 교착 상태
- 8.3 교착 상태 특성
- 8.4 교착 상태 처리 방법
- 8.5 교착 상태 예방
- 8.6 교착 상태 회피
- 8.7 교착 상태 탐지
- 8.8 교착 상태로부터 회복
- 8.9 요약, 연습문제, 추가 자료
- 9.1 배경
- 9.2 연속 메모리 할당
- 9.3 페이징
- 9.4 페이지 테이블의 구조
- 9.5 스와핑
- 9.6 사례: Intel 32비트와 64비트 구조
- 9.7 사례: ARM 구조
- 9.8 요약, 연습문제, 추가 자료
- 10.1 배경
- 10.2 요구 페이징
- 10.3 쓰기 시 복사
- 10.4 페이지 교체
- 10.5 프레임의 할당
- 10.6 스래싱
- 10.7 메모리 압축
- 10.8 커널 메모리의 할당
- 10.9 기타 고려 사항
- 10.10 운영체제의 예
- 10.11 요약, 연습문제, 추가 자료
- 11.1 대용량 저장장치 구조의 개관
- 11.2 디스크 스케줄링
- 11.3 NVM 스케줄링
- 11.4 오류 감지 및 수정
- 11.5 저장장치 관리
- 11.6 스왑 공간 관리
- 11.7 저장장치 연결
- 11.8 RAID 구조
- 11.9 요약, 연습문제, 추가 자료
- 12.1 개관
- 12.2 입출력 하드웨어
- 12.3 응용 입출력 인터페이스
- 12.4 커널 입출력 서브시스템
- 12.5 입출력 요구를 하드웨어 연산으로 변환
- 12.6 STREAMS
- 12.7 성능
- 12.8 요약, 연습문제, 추가 자료
- 13.1 파일 개념
- 13.2 접근 방법
- 13.3 디렉터리 구조
- 13.4 보호
- 13.5 메모리 사상 파일
- 13.6 요약, 연습문제, 추가 자료
- 14.1 파일 시스템 구조
- 14.2 파일 시스템 구현
- 14.3 디렉터리 구현
- 14.4 할당 방법
- 14.5 가용 공간의 관리
- 14.6 효율과 성능
- 14.7 복구
- 14.8 예: WAFL 파일 시스템
- 14.9 요약, 연습문제, 추가 자료
- 15.1 파일 시스템
- 15.2 파일 시스템 마운팅
- 15.3 파티션과 마운팅
- 15.4 파일 공유
- 15.5 가상 파일 시스템
- 15.6 원격 파일 시스템
- 15.7 일관성의 의미
- 15.8 NFS
- 15.9 요약, 연습문제, 추가 자료
- 16.1 보안 문제
- 16.2 프로그램 위협
- 16.3 시스템과 네트워크 위협
- 16.4 보안 도구로서 암호 기법
- 16.5 사용자 인증
- 16.6 보안 방어의 구현
- 16.7 예: Windows 10
- 16.8 요약, 추가 자료
- 17.1 보호의 목표
- 17.2 보호의 원칙
- 17.3 보호 링
- 17.4 보호의 영역
- 17.5 접근 행렬
- 17.6 접근 행렬의 구현
- 17.7 접근 권한의 취소
- 17.8 역할 기반 액세스 제어
- 17.9 강제적 접근 제어
- 17.10 자격-기반 시스템
- 17.11 기타 보호 개선 방법
- 17.12 언어 기반의 보호
- 17.13 요약, 추가 자료
- 18.1 개요
- 18.2 역사
- 18.3 장점 및 특징
- 18.4 빌딩 블록
- 18.5 VM 유형 및 구현
- 18.6 가상화와 운영체제 구성요소
- 18.7 사례
- 18.8 가상화 연구
- 18.9 요약, 추가 자료
- 19.1 분산 시스템의 장점
- 19.2 네트워크 구조
- 19.3 통신 구조
- 19.4 네트워크 및 분산 운영체제
- 19.5 분산 시스템의 설계 문제
- 19.6 분산 파일 시스템
- 19.7 DFS 명명 및 투명성
- 19.8 원격 파일 액세스
- 19.9 분산 파일 시스템에 대한 최종 생각
- 19.10 요약, 연습 문제, 추가 자료
- 20.1 Linux 역사
- 20.2 설계 원칙
- 20.3 커널 모듈
- 20.4 프로세스 관리
- 20.5 스케줄링
- 20.6 메모리 관리
- 20.7 파일 시스템
- 20.8 입/출력
- 20.9 프로세스 간 통신
- 20.10 네트워크 구조
- 20.11 보안
- 20.12 요약, 연습문제, 추가 자료
- 21.1 역사
- 21.2 설계 원칙
- 21.3 시스템 구성요소
- 21.4 터미널 서비스와 빠른 사용자 교체
- 21.5 파일 시스템
- 21.6 네트워킹
- 21.7 프로그래머 인터페이스
- 21.8 요약, 연습 문제, 추가 자료
- A.1 기능 전이
- A.2 초기 시스템
- A.3 Atlas
- A.4 XDS-940
- A.5 THE
- A.6 RC 4000
- A.7 CTSS
- A.8 MULTICS
- A.9 IBM OS/360
- A.10 TOPS-20
- A.11 CP/M과 MS/DOS
- A.12 Macintosh 운영체제와 Windows
- A.13 Mach
- A.14 자격-기반 시스템-Hydra 및 CAP
- A.15 기타 시스템들, 추가 자료