목록운영체제 (17)
개발자 끄적끄적
- 사용자나 응용 프로그램의 관점 - 정보를 저장하고 관리하는 논리적인 단위 - 저장 형식과 내용은 프로그래머에 의해 결정 - 컴퓨터 시스템의 관점 - 정보를 저장하는 최소 단위의 컨테이너 - 바이트의 나열 - OS에 의해 관리/조작됨 - 응용 프로그램은 파일 내 바이트 주소 사용 - 파일 내 바이트 위치(offset) - 운영체제는 논리 블록 주소(LBA, logical block addr.) 사용 - 저장 매체를 1차원의 연속된 데이터 블록들로 봄 - 저장 매체의 종류와 무관 - 파일을 블록 크기로 분할하고, 디스크에 분산 저장 - 디스크 장치는 디스크 물리 주소 사용 - 디스크의 섹터 위치를 나타내는 주소 - CHS 물리주소 = (실린더번호, 헤드번호, 섹터번호) - 디스크 장치의 펌웨어가 LBA를..
보호되어 있는 글입니다.
- 성능에 크게 영향을 미침 - 프레임 할당 알고리즘 - 프로세스 당 할당할 frame의 개수를 결정 - 프로세스의 작업 집합에 포함될 page들을 수용할만한 개수의 frame을 할당하여 페이지 부재를 줄일 수 있도록 - 페이지 교체 알고리즘 - 페이지 부재가 발생했으나 빈 frame이 없는 경우 비울 frame을 결정 - 작업 집합에 속하지 않은 page가 담긴 frame을 선택해서 미래에 사용될 page가 교체되지 않도록 유지 - 각 프로세스 마다 실행에 필요한 최소 page frame수가 확보되어야 한다 - Frame수 감소시 page fault rate 증가 - Page fault 발생 시 instruction cycle의 재실행 필요 - 한 instruction이 참조하는 모든 page는 동시에..
- "현재 실행되고 있는 코드들은 반드시 물리적 메모리에 존재해야 한다" - 앞서 다룬 메모리 관리 기법들의 특징 - 방법 - 프로세스 전체를 메모리에 적재 - 가장 손쉬운 방법 - Dynamic Loading - 프로그래머의 특별한 주의와 추가 작업 필요 - 단점 - 프로세스의 크기가 물리적 메모리의 크기로 제한 - 컴퓨터에 설치 가능한 물리 메모리의 한계 - CPU의 주소 버스 크기에 좌우 - 32비트 CPU의 물리 메모리 최대량 : 2^32B = 4GB - 64비트 CPU의 물리 메모리 최대량 : 2^64B = 2^24TB - 실제 설치되는 물리 메모리 - 현재 대부분 8~32GB정도 장착 - 비용적인 한계 - 물리 메모리보다 큰 크기의 프로세스는 실행될 수 없다! - 동시 수행되는 프로세스들의 크..
- 한 프로세스의 논리 주소 공간을 동떨어진 공간들에 배정할 수 있도록 지원 - 연속 할당에서처럼 연속적인 메모리 공간을 찾거나 만들 필요 없음 - 외부 단편화 문제를 해결할 수 있는 메모리 관리 기술 - 동적 할당의 한 형태 - 모든 논리 주소는 페이징 하드웨어에 의해 물리 주소로 매핑 - 대부분의 컴퓨터 시스템에서 채택 - (Page) Frame - 물리 메모리를 고정된 크기의 블록으로 분할 - Page - 논리 주소 공간을 하나의 frame과 같은 크기의 블록으로 분할 - OS는 모든 free frame들을 관리 - Frame table : 각 frame의 할당 정보 기록 - n page 크기의 프로그램 실행 위해서는 n개의 free frame을 차고, 그 곳에 적재 - 논리 주소를 물리 주소로 변..
- 주기억장치(Main memory) - 저장 공간(words or bytes)들의 배열로 구성 -> RAM - CPU 이용률(utilization)을 높이기 위해서는 multi-tasking 필요 - 주기억장치에서 다수의 프로그램을 탑재하고 각각을 번갈아 가며 수행 - 주기억장치를 관리하는 여러 기법 소개 - Paging, Segmentation, ... -> 대부분 하드웨어 지원이 필요 - CPU 메모리 접근 시간을 줄이기 위해 - '가격대비 성능'을 위해 계층적으로 구성 - 정의 - 프로그램이 실행되는 동안 CPU가 액세스 하는 기억장치는 몇몇 특정 영역에 '집중되는' 경향이 있다 - =참조의 지역성(Locality of Reference) - 근거 - 반복루프와 서브루틴 - 표나 데이터 배열에 대..
- 교착상태 - 자원을 자유롭게 할당한 결과 자원부족 상태 - 기아상태(Starvation) - 교착상태를 예방하기 위해 무한히 기다림 - 작업이 결코 사용할 수 없고 계속 기다려야 하는 자원을 할당할 때 발생하는 결과 - 교착상태나 기아회피 필요를 단순하게 표현하는 고전적인 동기 문제 - 철학자 5명은 대부분의 시간을 생각하고 먹는데 소비 - 한 철학자가 생각 중일 때에는 다른 철학자가 간섭하지 않음 - 철학자는 한 번에 하나의 젓가락만 들 수 있음 - 왼쪽 먼저, 오른쪽 나중 - 이웃 철학자가 들고 있는 것은 취할 수 없음 - 식사를 마치면 모두 내려놓고 다시 생각함 - 공유 데이터: - Bowl of rice(data set) - S..
- 교착상태 발생이 허용되는 시스템 - 교착상태 예방/회피 알고리즘을 사용하지 않는 시스템 - 구성 방법 - 탐지 알고리즘(Detection algorithm) - 시스템을 검사해 교착상태 발생여부 결정 - 복구 기법(Recovery scheme) - 교착상태 상태로부터 회복 - 교착상태 탐지 알고리즘 - 대기 그래프(Wait-for graph) - 자원 할당 그래프의 변형 - 자원 유형의 노드 제거 후 적절한 간선들을 집합 - Pi -> Pj : Pi is waiting for Pj - 주기적으로 그래프 안에서 사이클 존재를 탐지하는 알고리즘 - 사이클이 존재하면 교착상태 발생 가능 - Available - 각 유형 당 가용 자..
- 시스템 측면에서 자원의 요구가 뒤엉킨 상태 - 한 스레드 집합 내의 모든 스레드가 그 집합 내의 다른 스레드에 의해서만 발생될 수 있는 사건을 서로 무한히 기다리는 상황 - 다중 프로그래밍 환경에서 - 둘 이상의 스레드가 - 서로 상대방의 작업을 끝나기만을 기다리기에 - 결과적으로 아무것도 하지 못하는 상태 - 병행 처리 기술과 자원 공유에 따른 일종의 부작용 - 교각을 자원에 비유 - 교착상태가 발생하면 한쪽의 차가 후진해야 해결될 수 있음 - 때로는 몇몇의 차가 모두 후진해야 할 수도 - 기아 상태가 가능 - 대부분의 OS에서 교착상태를 완전히 예방해주지는 못함 - 커널 내에서는 거의 발생하지 않음 - 매우 정교하게 작성되기 때문 - 멀티 스레드 app에서 주로..
- 프로세스 여러 개가 동시에 실행되는 것 - 독립적인 프로세스(Independent process) - 다른 프로세스 실행에 영향을 주거나 받지 않는 프로세스 - 협력적인 프로세스(Cooperating process) - 다른 프로세스 실행에 영향을 주거나 받는 프로세스 - 정보 공유 - 계산 속도 향상 - 모듈식 시스템 구성 - 사용자 편의 - 제한된 자원을 공유하기 위해 자주 상호작용 한다 - 상호작용하는 프로세스는 순서에 맞게 실행되도록 동기화 시켜야한다 - 협력적인 스레드들간에 - 공유 데이터를 동시에(concurrently) 조작하면 데이터 불일치(data inconsistency)가 생길 수 있다 - 데이터 훼손 발생 - 데이터 일치(data consistency)를 위해서는 - 협력적인 스..
- CPU 유후 시간을 줄이기 위한 다중 프로그래밍 - 작업 스케줄링(job scheduling) - 보조저장장치로부터 메모장에 올릴 작업 선택 - 시작 시 혹은 한 프로세스 종료 때마다 - CPU 스케줄링(CPU scheduling) - 메모리에 적재된 작업 중 CPU를 할당할 프로세스 선택 - 자원에 대한 경쟁이 있을 때 경쟁자들 중 하나를 선택하는 과정 - 작업(job) 스케줄링 - 배치 시스템 - 대기중인 배치 작업 중 메모리에 적재할 작업 선정 - CPU 스케줄링 - 프로세스/스레드 중 하나를 선택해 CPU 할당 - 디스크 스케줄링 - 디스크 입출력 요청 중 하나를 선택하여 장치를 사용하도록 - 입출력 장치 스케줄링 - 프린팅 작업 중 하나를 선택해 프린터 장치 할당 - 프로세스들은 실행(CPU..
- 작업 or 태스크(task) - 컴퓨터에서 처리하고자 하는 일의 단위 - 멀티 태스킹(multi-tasking) - 한 시스템 내에서 여러 태스크를 동시 실행하는 기법 - 사용자 입장에서는 동시에 여러 작업을 처리 가능 - OS 입장에서는 여러 태스크를 관리해야하는 부담 -> 프로세스 단위의 실행의 문제점 - 전통적으로 태스크는 프로세스로 구성 - multi-processing - 한 응용 프로그램이 다수의 비슷한 작업을 수행할 필요가 있을 수 있다 - 예 : 웹 서버 - 단일 프로세스로 동작한다면, 한 번에 하나의 클라이언트만 서비스 가능 - 웹 서버에 요청이 들어오면 그 요청을 수행할 별도의 프로세스 생성산다면, 오버헤드 - 좀 더 가볍게..
- 프로그램(Program) - 보조저장장치에 저장된 실행 가능한 파일 - 수동적 존재 - 프로세스(Process) - 메모리에 적재되어 CPU에 의해 실행중인 프로그램 - 실행 중에 필요한 자원을 할당 받음 - CPU를 할당 받기 위해 대기하거나 I/O 처리가 끝나기를 대기하는 경우 포함 - 실행중인 프로그램 - 오늘날 시분할 시스템에서 작업의 단위 - PC와 관계되는 자원들의 집합을 갖는 능동적 실체 - 생성, 실행, 일시 중단, 재개 - 시스템 = 프로세스들의 집합체 - OS에 의해 CPU는 프로세스들간에 다중화(Multiplex)하여 시스템 효율성을 높임 - OS는 실행되는 프로그램을 메모리에 잭재 - 실행에 필요한 메모리 할당 - 코드, 데이터, 스택... - 각 프로세스들은 독립적인 메모리 공..
- CPU가 현재 하던 일을 중단하고 미리 정의된 다른 일을 하도록 처리하는 '비동기적' 방법 *비동기적 : 동시에 일어나지 않는다 를 의미한다. 요청과 결과가 동시에 일어나지 않을 것이라는 약속이다. 1. 하드웨어 인터럽트 : 각 장치가 어떤 비동기적 상황 발생을 CPU에게 알리는 신호 - 인터럽트 발생 -> CPU는 ISR 실행 2. 소프트웨어 인터럽트 : CPU 명령어에 의해 하드웨어 인터럽트 수신한 것처럼 처리 - 예시) - 사용자의 입력 장치 조작 - 디스크 처리 종료 - 시스템 클럭으로부터 시간 만료 알림, USB 메모리 부착 혹은 해제 - 명령어 인출 -> 명령어 실행 -> 인터럽트 발생(Y/N) 인터럽트가 발생할 때(Y) -> ISR 시작 준비 인터럽트가 발생되지 않았을 때(N) -> 다음..
- 부팅 시 메모리에 적재되는 '함수/데이터'의 집합 - 컴파일된 바이너리, 보조저장장치의 특정 영역에 저장 - 커널이 스스로 실행되어지는 능동적인 주체는 아니다 *스스로 실행되어지는 능동적인 주체 : 프로세스(Process) - 사용자공간 -> (시스템호출) -> 커널공간(커널 함수들과 자료구조) -> (디바이스 드라이버) -> 타이머, 디스플레이, 디스크, 키보드 - 키보드(가 눌렸을 때) -> 인터럽트 -> 디바이스 드라이버 -> 커널공간(커널에서 제공하는 기능들) - 커널은 스스로 실행되는 프로세스인가? 아니요, 시스템 호출을 통해 호출되는 단순 함수/데이터의 집합 - 커널은 실행 중이다? 아니요, 시스템 호출/인터럽트를 통해 커널 코드/ISR(Interrupt Service Routine)이 실..
- 다중프로그래밍 OS에서는 다수의 app 동시 실행 - app이 직접 컴퓨터 자원에 접근하면 충돌 혹은 훼손 발생 가능 - 다른 app이 적재된 메모리 훼손 - 다른 app이 생성한 파일 훼손 - app이 커널 적재된 영역 훼손 - 응용 프로그램의 자원 접근 불허 : 자원에 대한 접근 커널에게만 부여 - 메모리 '주소 공간'을 분리 - 사용자 주소 공간 : 응용 프로그램 적재 - 커널 주소 공간 : 커널 적재 - CPU '실행 모드'를 분리 - 사용자 모드 : 응용 프로그램 실행 - 커널 기능 필요시 시스템 호출 이용 -> 커널 모드로 전환 - 커널 모드 : 커널 모드 실행 - 논리 주소 공간 : 'CPU'가 접근하는 주소 범위 - 사용자 주소 공간(user space) - 각 응용프로그램이 나누어 적..