본문 바로가기

공부 기록/OS

(16)
[OS/공룡책] Chapter 3. 프로세스 - 연습 문제 1. 그림 3.30에 표시된 프로그램을 사용하여 LINE A에서 출력되는 내용을 설명하라. - 자식 프로세스가 값 복사본을 업데이트하므로 5를 출력한다. 제어가 부모 프로세스에 반환되면 값은 5로 유지된다. 2. 최초의 부모 프로세스를 포함하여 그림 3.31에 표시된 프로그램에 의해 몇 개의 프로세스가 생성되는가? - 8개의 프로세스가 생성된다. 3. Apple 모바일 iOS 운영 체제의 원래 버전은 병행 처리 기법을 제공하지 않았다. 병행 처리로 인해 운영체제에 추가되는 세 가지 주요 문제에 대해 논의하라. - CPU 스케줄러는 서로 다른 동시 프로세스를 인식해야 하며 동시 프로세스를 스케줄링하는 적절한 알고리즘을 선택해야 한다. / 동시 프로세스는 서로 통신해야 할 수도 있다. 그러므로 운영 체제는 ..
[OS/공룡책] Chapter 3. 프로세스 - 클라이언트 서버 환경에서 통신 소켓 - 소켓(socket)은 통신의 극점(endpoint)을 뜻한다. - 각 소켓은 IP 주소와 포트 번호 두 가지를 접합해서 구별한다. - 일반적으로 소켓은 클라이언트-서버 구조를 사용한다. - 모든 연결은 유일해야 한다. 호스트 X에 있는 다른 클라이언트 프로세스가 위와 동일한 웹 서버와 통신을 하면 그 클라이언트는 1024보다 크고 1625가 아닌 다른 포트 번호를 부여받게 된다. 이것은 모든 연결이 유일한 소켓 쌍으로 구성되는 것을 보장한다. - Java는 세 가지 종류의 소켓을 제공한다. - 연결 기반(TCP) 소켓 => Socket 클래스 - 비연결성(UDP) 소켓 => DatagramSocket 클래스 - MulticastSocket 클래스(DatagramSocket 클래스의 서브 클래스)..
[OS/공룡책] Chapter 3. 프로세스 - IPC 시스템의 사례 IPC 시스템의 사례 POSIX 공유 메모리 - POSIX 공유 메모리는 메모리-사상 파일을 사용하여 구현된다. - 먼저 아래와 같이 shm_open() 시스템 콜을 사용하여 공유 메모리 객체를 생성해야 한다. fd = shm_open(name, O_CREATE | O_RDWR, 0666); - 객체가 설정되면 ftruncate() 함수를 사용하여 객체의 크기를 바이트 단위로 설정한다. ftruncate(fd, 4096); - 마지막으로 mmap() 함수가 공유 메모리 객체를 포함하는 메모리-사상 파일을 구축한다. - 생산자-소비자 모델을 사용하는 공유 메모리 구현에서 생산자는 공유 메모리 객체를 구축하고 공유 메모리에 데이터를 쓰고, 소비자는 공유 메모리에서 데이터를 읽는다. Mach 메시지 전달 - ..
[OS/공룡책] Chapter 3. 프로세스 - 프로세스 간 통신 프로세스 간 통신 - 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스는 독립적이다. 프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받는다면 이는 협력적인 프로세스들이다. - 협력적 프로세스들은 데이터를 교환할 수 있는, 즉 서로 데이터를 보내거나 받을 수 있는 프로세스 간 통신(interprocess communication, IPC) 기법이 필요하다. - 프로세스 간 통신에는 기본적으로 두 가지 모델이 있다. => 공유 메모리와 메시지 전달 - 공유 메모리 모델 : 공유 메모리 영역을 구축할 때만 시스템 콜이 필요하며, 공유 메모리 영역이 구축되면 모든 접근은 일반적인 메모리 접근으로 취급되어 커널의 도움이 필요 없다. 메시지 전달 모델보다 더 빠르다..
[OS/공룡책] Chapter 3. 프로세스 - 프로세스 개념, 프로세스 스케줄링, 프로세스에 대한 연산 프로세스 개념 프로세스 - 프로세스란 실행 중인 프로그램이다. - 프로세스의 메모리 배치는 일반적으로 여러 섹션으로 구분된다. - 텍스트 섹션 : 실행 코드 - 데이터 섹션 : 전역 변수 - 힙 섹션 : 프로그램 실행 중에 동적으로 할당되는 메모리 - 스택 섹션 : 함수를 호출할 때 임시 데이터 저장 장소(예 : 함수 매개변수, 복귀 주소 및 지역 변수) - 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 줄어들거나 커질 수 있다. 스택 및 힙 섹션이 서로의 방향으로 커지더라도 운영체제는 서로 겹치지 않도록 해야 한다. - 프로그램 그 자체는 프로세스가 아니다. - 프로그램은 명령어 리스트를 내용으로 가진 디스크에 저장된 파일(실행 파일이라고 불림)과 같은 수동적인 존재(passive entity)이다...
[OS/공룡책] Chapter 2. 운영체제 구조 - 연습 문제 1) 시스템 콜의 목적은 무엇인가? - 시스템 콜은 사용자 수준 프로세스가 운영체제의 서비스를 요청하는 것을 허용한다. 2) 명령 인터프리터의 목적은 무엇인가? 통상 커널에 포함되지 않는 이유는 무엇인가? - 명령 인터프리터는 사용자 또는 명령 파일에서 명령을 읽고, 일반적으로 하나 이상의 시스템 콜로 변환하여 실행한다. 명령 인터프리터는 변경될 수 있으므로 일반적으로 커널의 일부가 아니다. 3) UNIX 시스템에서 새 프로세스를 시작하기 위해 명령 인터프리터나 셸에서 어떤 시스템 콜이 실행되어야 하는가? - 새 프로세스를 시작하기 위해서는 fork() 시스템 콜과 exec() 시스템 콜이 수행되어야 한다. fork() 시스템 콜은 현재 실행 중인 프로세스를 복제하는 반면, exec() 시스템 콜은 호출..
[OS/공룡책] Chapter 2. 운영체제 구조 - 운영체제 빌딩과 부팅, 운영체제 디버깅 운영체제 빌딩과 부팅 - 일반적으로 운영체제는 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계된다. 운영체제 생성 - 운영체제를 처음부터 생성(또는 빌딩)하는 경우 다음 절차를 밟아야 한다. 1. 운영체제 소스 코드를 작성한다.(또는 이전에 작성된 소스 코드를 확보한다.) 2. 운영체제가 실행될 시스템의 운영체제를 구성한다. 3. 운영체제를 컴파일 한다. 4. 운영체제를 설치한다. 5. 컴퓨터와 새 운영체제를 부팅한다. - 리눅스 시스템을 처음부터 빌드하는 방법 1. http://www.kernel.org에서 서 Linux 소스 코드를 다운로드한다. 2. "make menuconfig" 명령어로 커널을 구성한다. => .config 구성 파일을 생성한다. 3. "make" 명령어로 메..
[OS/공룡책] Chapter 2. 운영체제 구조 - 운영체제 구조 모놀리식 구조 - 운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 것이다. => 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것이다. - 모놀리식 구조는 운영체제를 설계하는 일반적인 기술이다. - 제한적인 구조를 가진 운영체제의 예 => 최초의 UNIX 운영체제 => 커널, 시스템 프로그램으로 구성됨 - 모놀리식 커널의 명백한 단순성에도 불구하고 이 구조는 구현 및 확장하기 어렵다. - 성능 면에서 뚜렷한 이점이 있다. => 시스템 콜 인터페이스에는 오버헤드가 거의 없고 커널 안에서의 통신 속도가 빠르다. 계층적 접근 - 시스템의 한 부분을 변경하면 다른 부분에 광범위한 영향 => 모놀리식 접근법은 밀접하게 결합된 시스템으로 불린다. - 시스템은 다양한 방식으로 ..