Basic Operating SystemFunctions
OS의 목적은 컴퓨터 사용을 쉽게 하는 것
OS는 전체적인 시스템을 원활히 하기위해 자원을 관리
OS는 프로그래머와 연산자 간 상호작용을 위해 UI를 지원
OS는 일반적인 상황을 처리하는 서비스 제공
OS는 프로그램이 실행될떄 런타임 환경을 지원한다
운영체제
UI, 자원관리, 프로세스 처리환경 제공
Interrupt 처리
Process 관리
I/O subsystems
Memory 관리
File 관리
CPU 스케일링
Types of Operation
Single-job system : 하나의 작업 실행
Multiprogramming system : 여러 작업을 동시에 실행
Multiprocessor sysrem : 여러 개의 cpu를 사용해 작업을 병렬 실행
Network operating system : 원격으로 로그인하여 머신간 파일 관리(복사)
Distributed operating sysrem : 유저가 전체 네트워크를 하나의 시스템으로 볼수 있도록 하드웨어, 소프트웨어 관리
Batch processing system : 작업을 기계가 읽을 수 있는 형태의 제어문으로 묘사
- 사람의 개입 없이 OS가 작업을 읽고 실행
Time-sharing sysrem : 여러 대화형 프로그램을 동시에 실행
Real- time system : 시스템이 처리하는 일이 deadline이 존재하거나 특정 시간 내로 처리해야 하는 류의 specification이 정해지는 일들을 뜻한다.
- 외부 신호에 빠른 처리를 위해 설계됨
User interface
사람들이 쉽게 컴퓨터를 다룰 수 있게 OS에서 제공
OS는 UI를 위한 서비스 루틴을 포함한다
Run-Time Environment
프로그램을 위해 OS는 Run-Time Enciroment를 지원
OS는 I/O 작업을 수행하는데 지원하는 루틴을 포함
- 서비스 루틴은 프로그램 실행에 도음을 주는 외부머신이라 생각 할 수도 있다
- 이 외부머신은 가상머신이라 불림
멀티프로그래밍OS에서 Run-Time Enviroment는 컴퓨터의 자원을 관리하는 서비스 루틴을 가진다.
사용자는 운영체제 기능을 요청할떄 SVC(supervisor Call)와 같은 하드웨어 명령어 사용
- SVC명령어 실행시 서비스 루틴을 실행하는 인터럽트 발생
- 인터럽트 발생시 CPU를 supervisor mode로 바꾸도록함
Privileged instruction사용을 제한함으로서, 프로그램이 런타임 환경에서 제공되게 함
- 프로그램은 하드웨어제어보단, 가상머신을 활용해 다뤄진다
인터럽트 처리 (Interrupt Processing)
인터럽트(interrupt)는 컴퓨터가 정상적인 명령 실행 흐름을 변경하도록 유발하는 신호입니다.
인터럽트가 발생하면 제어권은 자동으로 인터럽트 처리 루틴(interrupt processing routine), 즉 **인터럽트 핸들러(interrupt handler)**로 전달됩니다.
인터럽트 처리 루틴은 인터럽트를 발생시킨 조건에 대응하여 적절한 동작을 수행하도록 설계되어 있습니다.
인터럽트 처리가 완료된 후에는 실행이 중단되었던 지점으로 제어가 다시 돌아갈 수 있습니다.
문맥전환 (Context Switching)
CPU상태와 레지지터의 상태를 저장하고 복구하는 것을 문맥전환이라함
Status word SW는 인터럽트 처리를 위해 다음과 같은 정보를 가지고 있다
SW 저장(Saving SW): 인터럽트가 발생한 프로세스에서 사용되던 **조건 코드 값(condition code value)**을 자동으로 보존합니다.
IDLE: CPU가 명령을 실행 중인지 아니면 대기(idle) 상태인지 지정합니다.
ID: 현재 실행 중인 사용자 프로그램을 식별하는 4비트 값을 포함합니다.
마스크(MASK)
인터럽트가 허용되는지 제어하기위해 사용
특정 인터럽트가 처리 중일떄 다른 인터럽트의 발생 방지를 위해 사용->마스크 필드 사용
MASK의 비트가 1로 설정되면 해당 클래스의 인터럽트가 허용되지 않으며(0일 경우 허용)
임시적으로 지연된 인터럽트는 pending 상태라함
Process Scheduling
스케쥴링 규칙에 따라 여러 프로세스의 제어를 위해 CPU관리
Dispatching : 프로세스를 선택하고 cpu제어권을 해당 프로세서에 넘기는작업
현재보다 더 높은 우선순위를 가진 프로세스가 있으면 dispatcher는 현재 대기중인 프로세스에게 더 높은 우선순위를 준다.
각각의 프로세스가 하나의 작업에만 연과있음
프로세스가 cpu를 사영해서 명령어 시행(Runnig)
이벤트 대기(Blocked)
블럭되거나 실행대기중인 것 Ready
Running은 딱 한개만
타임슬라이스는 최대한의 cpu 제어 가능시간
시간이 지나면 제거되고 대기상태로 가게된다
dispatch Ready에서 Running 상태로 바꿈
디스패치
1. 이전에 실행 중이던 프로세스가 있다면, 해당 프로세스의 상태 블록(PSB)을 업데이트
2. Ready 큐에서 실행할 다음 프로세스 선택
3. 준비 상태에 있는 프로세스가 존재하는 경우
3-1 프로세스를 Running 상태로 표시
3-2 TIme Slice(CPU 제어 가능 시간)을 설정
3-3 선택된 프로세스가 CPU를 사용할 수 있도록 한다.
4 실행 가능한 프로세스가 없는 경우에는 CPU를 유휴 상태(Idle)로 전환
Wait
실행중인 process가 특별한 이벤트를 기다릴때 process에게 WAIT Service 를 요구함으로써 OS에 통보
Signal
다른 process들이 기다리고 있는 event의 발생은 Signal요구에 의해 OS로 전달
I/O감독
소형컴퓨터는 입출력이 1바이트씩 수행됨
->작업 지연 발생
발전된 컴퓨터는 특수한 하드웨어가 존재,입출력 채널이라는 프로세스가 수행
(I/Ochannel은 CPU 대신 입출력 작업을 관리)-독립적
-->CPU는 다른 작업 처리 가능
I/O channel이 채널작업을 완료하면 I/O인터럽트를 생성한다.
-->작업을 완료할 때만 인터럽트를 생성시켜서 CPU에게 알림
I/O 요청 처리 과정
1. 채널 작업 영역에는 현재 실행 중인 채널 프로그램의 시작 주소와 해당 작업에 해당하는 ESB의 주소가 저장
2.I/O작업 완료 Status Flags 에 작업 결과 저장
3-1.작업 완료 인터럽트가 발생했을 때 CPU가 유휴(idle) 상태였다면 디스패처 호출
3-2.비정상 상태이면 오류복구작업 수행
4-2. 인터럽트 핸들러 는 작업 완료 후 중단된 프로세스의 상태를 복원하고 제어를 반환(중단된 지점에서 계속 실행 가능)
SVC2에서 I/O 요청을 처리하는 절차
1. 채널 상태 확인 (TIO)
2-1. 채널이 바쁜 경우 요청을 대기열에 추가
2-2. 채널이 비어있는 경우 I/O 요청 정보를 채널 작업 영역에 저장 (프로세스가 Ready상태가 됨)
3. 요청한 프로세스에 제어 반환(CPU가 제어를 받아 작업을 수행)
Processing an I/O Interrupt
1. 상태 플래그 확인
2-1. 작업이 정삭정으로 완료된 경우
1. ESB의 주소를 가져온다.
2. SVC 호출 (이벤트 발생을 알리기 위해)
3.대기열 확인(다음 I/O 수행)
2-2. 오류 발생시 오류 복구 시행
3. cpu의 상태 확인
3-1. 인터럽트 발생 시 CPU가 idle 상태이면 디스패처를 호출, 다음 실행 가능한 프로세스를 선택
3-2. 인터럽트 발생 시 CPU가 다른 작업을 수행중이면 LPS를 사용하여 중단된 프로세스의 상태를 복원하고 작업을 재개
메모리 관리
특징 | 고정파티션 | 가변 파티션 |
파티션 크기 | 고정된 크기 | 작업 크기에 따라 동적ㅇ로 설정 |
효율성 | 작업크기가 고정적일 때 효과적 | 작업 크기가 다양할 때 효율적 |
단편화 문제 | 내부 단편화 발생 가능 | 외부단편화 발생 가능 |
유연성 | 유연하지 않음 | 유연하고 동적임 |
가변 파티션
-운영 체제의 역할
-자유 메모리 영역의 연결 리스트를 유지하며 동적으로 메모리 관리
-메모리 할당 방식
-첫 번째 빈 영역, 가장 작은 빈 영역
-파티션 헤제 시
-해당 파티션이 자유 메모리 리스트에 반환되어 인접한 자유 메모리 영역과 병합
-> 외부 단편화를 줄임
Bounds Register
-파티션에서 할당된 메모리 범위 안에서만 동작하도록 제어
-모든 메모리 참종 대해 하드웨어가 참조된 주소를 Bounds Register와 비교
CPU의 수퍼바이저 모드
-운영체제가 메모리의 모든 위치를 참조 할 수 있음
->메모리를 보호하면서 운영체제가 효율적으로 자원을 관리
단편화
-사용 가능한 자유 메모리가 여러개의 분리된 블록으로 나뉘어질 때 발생(크기가 너무 작아져서)
작업 종료
-작업이 종료되면 나머지 파티션들이 메모리의 한쪽 끝으로 최대한 이동(연속적인 블록 모으기)
가변 파티션 문제점
-이동 가능한 파티션을 사용하는 경우 재배치와 관련된 문제 발생 가능
(메모리 주소가 변경되면 참조가 올바르지 않을 수 있음)
Relocation Register
-운영체제가 Relocation Register를 사용하여 실행중인 프록램의 시작 주소를 설정
(프로그램이 이동된 경우에도 올바른 메모리 참조를 보장한다.)
--------------------------------------------------------------------------------------------------------------가상 메모리
-가상 메모리는 실제 메모리 보다 더 큰 공간을 가질 수 있음
-프로그램이 사용하는 가상 메모리는 외부장치(Backing Store)에 저장
프로그램 관점에서 투명성
백킹 스토어와 가상-실제 메모리 매핑은 사용자 프로그램에게 완전히 투명(메모리 제한 고려 X)
Demand Paging
-대부분의 가상 메모리 시스템이 사용하는 방식
-페이지 맵 테이블
-페이지를 페이지 프레임에 매핑하기 위한 것
PMT(Page Mapping Table)
-하드웨어가 가상 메모리 주소를 실제 메모리 주소로 반환하는 데 사용
페이지 폴트(Page Fault)
-필요한 페이지가 아직 실제 메모리에 로드되지 않은 경우 발생
-운영체제가 페이지를 메모리에 로드해야 프로그램이 작동됨
운영 체제의 페이지 프레임 관리
-페이지 프레임 상태 테이블
페이지 폴트 처리 과정
-빈 페이지 프레임 검색
-빈 페이지 프레임이 있으면 필요한 페이지를 즉시 로드
-빈 페이지 프레임이 없으면 현재 메모리에 있는 페이지 중 하나를 제거하여 새 페이지를 위한 공간 확보
-페이지 교체
-빈 페이지 프레임이 없는 경우 교체 알고리즘 사용
인터럽트 핸들러와 페이지 프레임 선택
-인터럽트 핸들러는 요청된 페이지를 수용할 페이지 프레임을 선택한다.
-선택된 프레임은 “커밋됨”으로 표시되며 이후의 페이지 폴트 처리에서 다시 선택되지 않도록 설정
페이지 제거와 PMT 업데이트
-기존 페이지를 제거하면 PMT가 업데이트 된다.
-PMT는 페이지 제거를 반영하여 프로세스의 메모리 상태를 최신으로 유지
페이지 작업 완료 후 제어 반환
-페이지 교체 및 로드 작업이 안료 된 후 페이지 폴트를 발생시킨 명령으로 제어를 반환
LRU(Least Recently Used)방법
-LRU는 메모리에서 가장 오랫동안 사용되지 않은 페이지를 교체하는 방식
작업 집합
-자주 사용되는 페이지의 집합
연관 메모리를 활용한 페이지 테이블
장점
-주소 변환을 빠르게 수행 가능
단점
-큰 실제 메모리를 가진 시스템에서는 비용이 높음
Demand Paging
장점
-단편화 감소
-단편화로 인한 메모리 낭비를 대부분 방지
-불필요한 메모리 사용 방지
DAT(Dynamic Address Translation)-하드웨어에서 구현(빠르고 효율적인 주소 변환 처리)
1. 가상 주소 분해
-분해 과정: 가상주소를 페이지 번호(Page Number)와 오프셋(offset)으로 분해
-페이지 번호는 PMT에서 해당 페이지 위치를 찾는데 사용
-오프셋은 해당 페이지 내의 특정 위치를 지정
2. PMT에서 엔트리 검색
-페이지가 현재 메모리에 존재하는지 확인
3-1. 페이지가 메모리에 존재하는 경우
3-1-1. 실제 주소 계산
-페이지 프레임 주소와 오프셋을 결합하여 실제 메모리 주소 형성
3-1-2. 쓰기 명령
-해당 명령이 메모리를 수정하는 경우, PMT 엔트리를 수정된 상태로 표시
3-2. 페이지가 메모리에 없는 경우
3-2-1. 페이지 폴트(Page Fault) 발생
-페이지가 메모리에 없으면 페이지 폴트 인터럽트를 생성하여 체제가 운영체제 가 처리하도록 한다.
페이지 폴트가 발생했을 때 운영 체제가 이를 처리하는 절차
초기작업
1. 인터럽트 워크 영역 저장, 프로세스 차단
2. 빈 페이지 프레임 확인
3-1. 빈 페이지 프레임이 있을 경우
3-1-1.빈 페이지 프레임 을 선택
3-1-2.선택된 페이지 프레임을 “커밋됨(commited)”으로 표시
3-1-3. 모든 인터럽트를 활성화하여(LPS 사용)
3-2. 빈 페이지 프레임이 없을 경우
페이지 제거
3-2-1. 제거할 페이지 선택
3-2-2. 선택된 페이지 프레임을 “커밋됨(committed)”으로 표시
3-2-3. PMT를 업데이트하여 제거된 페이지를 반영
3-2-4. 모든 인터럽트를 활성화하여 작업 재개
3-2-(1) 수정된 페이지가 있을 경우
-수정된 페이지는 백킹 스토어(Backing Store)에 쓰기 작업을 요청
-쓰기 작업이 완료될 때까지 대기
4. 페이지 읽기 작업
4-1. 백킹 스토어에서 필요한 페이지를 읽어와 선택된 페이지 프레임에 로드
4-2.읽기 작업이 완료될 때까지 대기
4-3 PMT와 페이지 프레임 테이블을 업데이트
5. 작업 재개
5-1.프로세스 상태 복원
5-2,프로세스 실행 재개
스레싱
-높은 페이지 폴트 발생률로 인해 시스템 성능이 완전히 붕괴되는 현상
-프로세스의 요구 메모리가 실제 메모리 용량을 초과할 때 발생 한다.
지역성(Locality of Reference)
-메모리 참조의 특성
-메모리 참조는 주소 공간 내에서 클러스터 형태로 발생
효과
-시간 지역성
-공간 지역성
장점
-모든 프로그램 주소를 실제 메모리에 유지하지 않아도 낮은 페이지 폴트율을 달성 가능
가상 주소와 실제 주소의 연결
-연결시점
-가상 메모리 주소가 실제 메모리 주소에 매핑되는 시점은 메모리 참조가 수행될 때이다.
-동적 매핑
-페이지 폴트가 발생할 경우, 필요한 페이지가 메모리에 로드되고 주소 매핑이 수행됨
세그먼트 기반 가상 메모리의 주소 구성
-주소구성
-세그먼트 번호와 해당 세그먼 트 내 오프셋으로 구성
-세그먼트 특성
-가변길이
-논리적 프로그램 단위
-세그먼트의 보호 속성
-보호속성
-세그먼트 단위로 읽기 전용, 실행 전용 등 특정 보호 속성을 부여할 수 있음
-보안 향상
-잘못된 접근을 방지하고,프로그램의 안전성을 높임
-세그먼트 공유
-다중 사용자 간 공유
-세그먼트는 서로 다른 사용자 작업 간에 공유될 수 있음
-세그먼트와 디맨드 페이징의 조합
-조합방식
-디맨드 페이징은 필요한 데이터만 메모리에 로드하여 효율성을 높임
-이중 매핑 필요
-세그먼트와 페이지를 결하하면 두 단계 매핑 및 주소 변환 절차가 필요
1. 세그먼트를 통해 페이지 테이블에 접근
2. 페이지 테이블을 통해 실제 메모리 주소 결정