! Register는 극소량의 data 또는 처리 중 중간 결과를 일시적으로 저장하는 역할을 하는 고속의 메모리
주기억장치(main memory, 주메모리)
데이터와 프로그램 저장
휘발성(volatile)
입출력 모듈(I/O module)
컴퓨터와 외부환경(보조기억장치, 통신장치 등) 사이의 데이터 이동 담당
구성요소
내부 buffer: 데이터가 처리될 때까지 일시적으로 data를 저장/보관
시스템 버스
처리기-주기억장치-입출력모듈을 연결하여 각 요소들이 통신할 수 있게끔 함
Program이란
처리기에 의해 처리되는 메모리에 저장된 명령어들의 집합
명령어 처리
명령어 처리는 크게 두 가지 단계로 구분된다.
Fetch - 명령어 반입 단계
Execution - 명령어 수행 단계
단일 명령어는 위의 두 가지 단계가 순서대로 한 번만 수행되며 이를 Instruction Cycle이라고 한다.
Interrupt란
프로그램 실행 중 문제상황이 발생하면 실행 중인 작업을 중단하고 인터럽트의 원인의 되는 작업을 처리한 후 다시 실행하던 곳으로 복귀하는 것
하나 이상의 인터럽트 발생 가능 (중첩 인터럽트)
처리기의 처리율을 향상시키기 위해 제공
종류
외부 인터럽트: 전원 결함, 입출력, 타이머 등의 요인으로 발생하는 인터럽트
내부 인터럽트: Trap이라고도 불리며, 잘못된 명령이나 잘못된 데이터 호출 시 발생 (0으로 나누기, overflow/underflow 등)
소프트웨어 인터럽트: 프로그램 처리 중 명령 요청에 의해 발생 (SVC(SuperVisor Call) - 감시 프로그램 호출 시의 경우)
Instruction Cycle 변화 양상
인터럽트 허용 X
명령어 사이클 시작
명령어 반입
명령어 수행
2, 3 반복하여 더이상 처리할 명령어 없을 때 종료
인터럽트 허용 O
명령어 사이클 시작
명령어 반입
명령어 수행
인터럽트 검사(인터럽트 처리기 구동)
처리기는 인터럽트 발생 여부를 검사하여
if 신호:
처리기는 현 프로그램 실행을 중지하고
인터럽트 처리기 루틴 수행
루틴 완료 시 다시 발생 지점으로 복귀, 프로그램 재개
else:
명령어 반입 단계로 분기
fetch-execution 중에 interrupt를 처리하게 되면 실행중이던 연산의 중간 값들을 저장해야하므로 비효율적이다. 따라서 실행중이던 cycle이 종료된 후 interrupt 처리
이 과정에서 약간의 오버헤드가 있음(인터럽트의 종류, 처리 방식을 결정하기 위해 인터럽트 처리기 내에서 추가 명령어를 수행해야함)은 당연하지만 인터럽트를 허용하는 것이 처리기의 효율적 이용 측면에서 이익이기 때문에 인터럽트가 필요하다.
Interrupt 체제 기본 요소
인터럽트 요청 신호
인터럽트 처리 루틴
장치 제어기/다른 시스템으로 인한 인터럽트 발생
처리기가 실행 중이던 명령(Micro Instruction) 실행 완료
처리기가 인터럽트를 발생시킨 장치에게 인터럽트 확인 신호를 보내면, 장치는 인터럽트 신호를 제거
처리기가 psw와 pc 등의 정보를 인터럽트 처리 후 복귀를 위해 저장(메모리 0번지, 시스템 제어 스택, 인터럽트 벡터 중 한 곳에)
처리기가 인터럽트에 해당하는 pc값을 적재
프로세스의 나머지 상태 정보(pc와 psw 이외의)를 시스템 제어 스택에 저장
인터럽트 처리기가 인터럽트 처리 시작
인터럽트 발생 이전의 상태로 처리기 복구
인터럽트 취급 루틴
메모리 계층 구조
메모리 설계 시 고려해야할 사항
얼마나 큰가?
얼마나 빠른가?
얼마나 비싼가?
즉, 용량 - 접근 속도 - 비용 사이에는 tradeoff가 있으며 아래가 그 예시들이다.
접근 시간이 짧을수록 비트당 비용 상승
용량이 클수록 비트당 비용 하락
용량이 클수록 접근 시간 길어짐
위의 딜레마를 벗어나기 위해 메모리 계층 구조의 채택 필요성이 증가했다.
계층 구조는 아래로 갈수록 각 메모리는 다음과 같은 특성을 가진다.
비트당 비용 감소
용량 증가
접근 시간 증가
처리기에 의한 메모리 접근 수 감소
이 구성의 성공 요소는 저속 메모리에 대한 접근 수를 줄이는 것으로부터 기인한다.
Cache Memory
주기억장치와 처리기 레지스터 사이 데이터 교환/이동시 사용되는 저장장치
처리기의 속도와 메모리의 속도 차이를 줄이기 위해 사용하는 고속 buffer 메모리
Motivation
모든 명령어 처리 사이클에서 처리기는 적어도 한 번은 메모리에 접근해야한다. 이때 처리기의 명령어 수행 속도는 명령어 사이클 속도에 영향을 받기 때문에 처리기와 주기억장치의 속도 차는 처리기 이용 효율 측면에서 심각한 문제였다.
👉 처리기와 메모리 사이에 캐시 같이 용량은 적지만 빠른 메모리를 제공하여 지역성의 원리를 이용하자
Principle
상대적으로 속도가 느린 주기억장치가 캐시와 함께 사용된다.
캐시는 주기억장치의 일부를 복사하여 갖고있다.
처리기가 메모리에서 한 워드를 읽으려 할 때, 해당 워드가 캐시에 있는지의 여부를 점검한다. 있으면 바로 사용하고, 없으면 메모리에서 캐시가 블록을 가져오고 처리기가 요청한 워드를 제공한다.
원하는 정보가 캐시에 있다면 적중(Hit), 아니면 실패
참조지역성(Locality of reference)으로 인해 요청한 워드가 캐시에 없는 경우는 빈번하게 발생하지 않는다.
참조지역성의 예: 어떤 메모리의 블록을 가져오면 그 이후의 참조는 가져온 블록 내의 워드일 확률이 높다.
단일 캐시 구조, 삼단계 캐시 구조 등등
직접 메모리 접근 Direct Memory Access
I/O 연산을 위해 사용 가능한 기법(Programmed I/O, Interrupt-driven I/O, DMA) 중 한 가지
Programmed I/O, Interrupt-driven I/O 방법은 아래와 같은 본질적인 문제를 갖고 있다.
I/O 전송률은 프로세서가 장치를 점검/서비스하는 속도에 제한을 받는다.
프로세서가 I/O 전송을 할 때마다 많은 명령어들이 수행되어야 한다.
따라서 대량의 데이터 이동 시에는 DMA가 효율적이다.
특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능 참고
멀티 프로세서 & 멀티 코어
컴퓨터의 성능 증가 또는 신뢰성 향상을 위한 병렬성을 제공하는 방법들
SMP(Symmetric Multi Processor)
특징
두 개 이상의 유사 수행 능력을 가진 프로세서로 구성
두 개 이상의 프로세서는 상호 연결된 주기억장치, 입출력 장치를 공유함
모든 처리기는 동일 기능 수행 가능 -> 대칭형 멀티 프로세서
즉, 하나의 주 메모리를 여러 CPU가 공유하는 것 -> 명령어를 병렬로 수행
단일 처리기 구조에 비해 갖는 장점
성능
가용성
점진적 확장
크기 조정(Scaling)
Multi Core
단일 칩에 여러 코어(처리기의 기초적인 연산을 처리하고 담당하는 부분으로 명령어 수행을 위한 ALU 갖고 있음)가 있는 것
즉, 명령어의 마이크로 연산을 병렬로 수행
운영체제 개요
목적과 기능
응용 프로그램의 수행을 제어
응용프로그램과 컴퓨터 하드웨어 사이의 인터페이스 역할
운영체제로 인해
편리성: 컴퓨터 사용의 편리성 증가
효율성: 컴퓨터 시스템 자원 효율적 사용
발전성: 효율적 개발 및 테스트 보장
각 측면에서 바라본 운영체제
1. 사용자/컴퓨터 인터페이스로서의 운영체제
최종 사용자는 컴퓨터를 응용 프로그램의 집합으로 바라본다.
응용은 프로그래밍 언어로 표현되며 응용 프로그래머에 의해 개발됨
프로그래머들의 개발을 돕기 위해(효율적인 개발을 위해) utility/library 등의 다양한 시스템 프로그램 제공됨
운영체제는 가장 중요한 시스템 프로그램들을 모아 놓은 것
운영체제는 하드웨어와 관련된 것들을 프로그래머에게는 숨기며 컴퓨터의 편리한 사용을 위한 인터페이스를 제공
제공하는 서비스들의 예 프로그램 개발: 문저 편집기, Debugger 등의 응용프로그램 개발 도구, 커널에는 포함 X, 프로그램 실행: 사용자를 대신해 자원 스케줄링, 파일 접근 제어, 시스템접근, 에러 발견 및 응답, …
2. 자원 관리자로서의 운영체제
운영체제는 컴퓨터가 작동하기 위한 자원의 관리를 책임진다. 이를 토대로 컴퓨터의 기능을 운영 체제가 관리한다고 볼 수 있을 것이다. 하지만 운영체제 또한 처리기에 의해 수행되는 하나 또는 일련의 프로그램이므로 운영체제의 관리 및 제어는 일반적인 의미와 약간 다르다. 이유는 일반적으로 제어를 하는 객체와 피제어 객체는 다른 객체지만 운영체제는 제어를 하기도 하고, 받기도 하기 때문이다.
주기억장치에 커널과 사용중인 OS와 다른 사용자 프로그램 및 데이터가 적재된다. 적재를 위한 주기억장치 할당은 운영체제와 메모리 하드웨어에 의해 공동으로 제어됨
커널: 운영체제에서 빈번히 사용되는 기능들을 포함
작동 과정
운영체제가 처리기에게 다른 시스템 자원의 사용을 지시 또는 프로그램 수행 시점 결정
처리기가 다른 응용 프로그램을 수행할 수 있도록 운영체제는 처리기에게 제어 양도
처리기가 다음 응용 프로그램 수행을 준비하는 동안에는 다시 제어를 돌려받음
운영체제의 발전
운영체제는 다음의 3가지 이유로 인해 계속해서 발전할 것이다.
하드웨어 업그레이드와 새로운 형태의 하드웨어 등장
새로운 서비스
버그 수정
따라서 구성이 구조적으로 모듈화되어야 하며, 문서화를 통해 모듈간 인터페이스가 명확하게 정의되어야 한다.
1. 순차 처리 Serial Processing
사용자가 순차적으로 컴퓨터를 사용
효율적인 순차 처리(이용)을 위해 다양한 시스템 소프트웨어들이 개발됨 ex 링커, 로더, 디버거, I/O Driver 등의 소프트웨어
문제점
Scheduling
예1) 사용자가 30분마다 예약이 가능할 때, 1시간을 예약한 후 45분만 사용한다면 15분은 낭비된다.
예2) 또는 완료되지 않았음에도 종료되는 문제 발생
Set up time
예) 단일 프로그램이 수행되기 위해 이뤄지는 일련의 과정들 중 에러가 발생하면 다시 처음부터 절차를 시작해야하므로 수행 준비 시간에만 상당한 시간을 소요하게 된다.
2. 단순 일괄처리 시스템 Simple Batch System
앞선 순차 처리의 문제점을 보완하기 위해, 즉, 처리기의 이용률을 높이기 위해 고안된 방식
모니터(Monitor)라는 소프트웨어를 사용하는 것이 기반 아이디어
사용자가 직접 명령을 내리지 않고 카드/테이프에 작업을 담아 오퍼레이터에게 전달하면 오퍼레이터는 전달받은 작업들을 모니터가 처리할 수 있도록 batch로 만든다. 각 프로그램이 완료될 때마다 제어가 모니터로 넘어가고 모니터가 다음 프로그램을 적재한다.
☞ 모니터를 이용해 스케줄링 문제 해결 가능
하지만 제어를 번갈아 갖기 위해 하드웨어 기능들(메모리 보호, 타이머, 특권 명령어, 인터럽트)이 필요하다.
오버헤드 발생
user program과 monitor가 번갈아 수행되기 때문에 monitor가 주메모리에 있어야 한다.
약간의 처리기 시간을 monitor가 사용한다.
에도 불구하고 순차처리에 비해 갖는 장점으로 인해 이용률 향상에 큰 기여를 했다.
3. 멀티프로그래밍 일괄처리 시스템 Multiprogrammed Batch Systems
입출력 장치의 속도가 처리기에 비해 느리기 때문에 발생하는 처리기 대기 시간의 낭비를 줄이고자 고안됨
주기억장치가 충분한 용량을 갖고 있다면 한 작업이 입출력 작업을 기다리고 있을 때 처리기의 제어를 다른 프로그램으로 넘겨 대기 시간을 줄일 수 있다.
☞ 멀티프로그래밍 (Multiprogramming) 또는 멀티태스킹 (Multitasking)
단순일괄 처리 시스템에서 요구되었던 것과 추가적인 몇 가지(입출력 인터럽트, DMA)의 하드웨어 기능을 필요로 한다.
다수의 작업이 수행될 준비를 위해서 작업들이 모두 주기억장치에 적재/상주해야한다. 따라서 메모리 관리가 필수적이며 처리기 할당을 위한 스케줄링 알고리즘이 요구된다.
4. 시분할 시스템 Time-Sharing Systems
대화형 멀티프로그래밍 (트랜잭션 처리 등 몇몇 작업은 대화형 작업니 필수적)
다수의 사용자가 처리기 시간을 공유하게 되어 사용자들은 자신이 처리기를 독점 사용하는 것으로 느낌.
만약 사용자가 n명이라면, 운영체제의 오버헤드를 무시한다고 가정한 상태에서 평균적으로 1/n의 컴퓨팅 능력을 사용할 수 있다. 사용자의 느린 반응 속도로 인해 가능
멀티프로그래밍 일괄처리 시스템
시분할 시스템
주요 목적
처리기 이용률 최대화
응답 시간 최소화
OS에 대한 명령어
작업과 함께 제공되는 작업 제어 언어 명령어
터미널에서 입력되는 명령어
🙊 두 시스템은 OS가 해결해야할 다양한 문제점들을 제기했다
OS의 발전과 함께 이뤄진 4가지 이론적 주요진전
프로세스 Process
정의
수행 중인 프로그램
컴퓨터 상에서 수행 중인 프로그램의 인스턴스
처리기에 할당되어 수행될 수 있는 개체
단일 순차 실행 쓰레드, 현재 상태, 연계된 시스템 자원 등에 의해 특정되는 활동 단위
탄생 배경
멀티 프로그래밍 일괄 처리 시스템, 시분할 시스템, 실시간 트랜잭션 시스템은 타이밍(timing)과 동기화(sysnchronnization)문제를 야기했다. 임시방편적인 작업 수행 과정 설계 및 처리 순서 결정은 특정 조건에서만 발생하는 미묘한 에러를 발생시키는 원인이 되었다. 이러한 에러들의 주요 원인은 부적절한 동기화상호배제 실패비결정적인 프로그램 연산교착상태였는데 이를 해결하기 위해 퍼리기 상에서 수행 중인 다양한 프로그램을 감시/제어하는 방법이 요구되었다.
구성요소
수행가능한 프로그램
프로그램 수행에 필요한 관련 데이터(변수, 작업 공간, 버퍼 등)
프로그램 수행 문맥 Execution context 또는 Process state
운영체제가 프로세스를 감독/제어하기 위해 필요한 내부 데이터
예) program counter, data register 등의 처리기 레지스터 내용, 프로세스의 우선순위, 입출력 대기 상태 등
프로세스의 상태는 프로세스 문맥 내 저장
구성요소에 포함시키지 않았지만 쓰레드 Thread라는 개념이 존재
실행의 흐름으로 프로세스가 확보해야할 자원 중 하나
쓰레드 개념으로 인해 병렬성 제어 기능 도입
메모리 관리 Memory management
저장장치 관리 측면에서 운영체제의 역할
프로세스 분리: 관계 없는 프로세스들이 서로 침범하지 못하게 분리 기법 제공
자동할당 및 관리: 프로그램 메모리 영역은 필요시 사용자의 개입 없이 동적으로 할당되어야 한다.
모듈식 프로그래밍 지원: 프로그래머의 프로그램 모듈 정의/작성/삭제/크기 동적 변경 보장
보호 및 접근 제어: 메모리 공유시 프로그램 또는 os의 무결성을 위해 보호/접근제어가 필요
장기 저장: 전원이 꺼져도 정보가 저장되는 수단 필요
운영체제는 위 요구사항들을 가상 메모리 또는 파일 시스템을 통해 해결한다.
가상메모리: 물리적으로 이용가능한 주기억장치의 크기에 상관없이 프로그램이 메모리 주소를 논리적 관점에서 참조할 수 있도록 한다.
정보보호와 보안
OS와 관련된 보안 및 보호에 관한 조치들을 네 가지 범주로 분류할 수 있다.
가용성 Availability: 시스템이 중지되지 않도록 하는 것과 관련
기밀성 Confidentiality: 사용자가 접근 권한이 없는 데이터로의 접근을 방지
데이터 무결성 Data Integrity: 불법적인 데이터 수정 방지
신빙성 Authenticity: 사용자 자격, 메세지, 데이터의 유효성과 관련안 적절한 인증과 관련
스케줄링과 자원관리
운영체제의 핵심 작업 중 하나는 이용가능한 다양한 자원들(주기억장치, 입출력장치, 처리기)을 관리하고 다양한 활성 프로세스들로부터 자원 사용 요구를 스케줄링하는 것이다.
모든 지원 할당 정책, 스케줄링 정책은 다음 세 가지의 사항을 반드시 고려해야 한다.
공정성
모든 프로세스들은 특정 자원에 대해 동등하고 공정하게 접근 기회를 갖는다. 비슷한 요구를 하는 작업들에 대해 특히 그러하다.
반응 시간 차등화
운영체제는 다른 조건을 가진 작업 클래스들을 구별하며 모든 요구 조건들을 포괄적으로 만족시킬 수 있도록 할당 및 스케줄링을 동적으로 수행해야 한다.
예) 한 프로세스가 입출력 장치 사용을 위해 대기 중일 때, 다른 프로세스보다 대기 중인 프로세스에 더 먼저 반응하여 해당 장치를 다른 프로세스가 사용하려하는 것을 방지할 수 있다.
효율성
작업 처리량 극대화 + 반응 시간 최소화 + 시분할 시스템 같은 경우 다수 사용자 동시 수용을 만족해야한다.
특정 상황에 맞는 균형을 찾기 위해 현재도 이를 위한 연구를 진행중이다.
최근 운영체제 접근 방식/설계 개념
마이크로커널 구조 Microkernel Architecture
지금까지 대부분의 운영체제는 단일체 커널로 특징지어짐, 전통적 운영체제의 커널
단일체 커널은 하나의 프로세스 형태로 구현되고 커널 내 모든 요소는 같은 주소 공간을 공유하는 반면,
마이크로 커널 구조는 주소 공간, 프로세스 간 통신, 기본 스케줄링 등 소수 핵심 기능만 커널에 포함됨
그밖의 기능은 서버로 불리는 프로세스에 의해 제공
이 방식을 통해 커널과 서버 개발 분리 가능
구현이 간단하고 융통성이 있으며 분산 환경에 적합
멀티쓰레딩 Multithreading
응용을 실행하는 프로세스를 동시에 수행될 수 있는 쓰레드들로 분할하는 기법
Thread
작업의 디스패치 단위 {처리기 문맥(pc, stack poiter) + 고유 데이터 영역으로서의 stack} 순차적 수행 처리기가 다른 쓰레드로 context switching 하도록 인터럽트 허용
Process
하나의 단일 응용을 여러 개의 쓰레드로 분할하여 응용의 모듈성과 관련 사건 타이밍을 효과적으로 제어 가능 {하나 이상의 쓰레드 + 관련 시스템 자원(코드 , 데이터 포함 메모리, 오픈한 파일들, 장치)}
대칭형 멀티 프로세싱 SMP
하드웨어 구조 용어임과 동시에 그 구조를 활용하는 운영체제의 행동 양식을 지칭하는 용어
멀티 쓰레딩(단일 처리기에서도 효과적)과 SMP(쓰레드화 되지 않은 프로세스에게도 유용)는 독립적인 개념이며 상호보완적이고 동시에 사용될 때 효과적이다.
분산운영체제 Distributed Operation System
사용자가 단일 주기억장치와 단일보조기억 장치를 사용하는 것처럼 느끼게 한다.
분산파일시스템 같은 통합 접근 기능 제공
객체지향설계 Object-oriented Design
작은 커널을 모듈 단위로 확장해가는 과정에 대해 규칙 제공
프로그래머는 무결성을 해치지 않는 선에서 OS를 원하는 대로 구성 가능
결함 허용 Fault Tolerance
어떤 시스템의 전체 또는 일부 하드웨어/소프트웨어에 결함이 발생해도 계속 정상적으로 작동할 수 있게씀 하는 것
신뢰성은 증가하지만 결함 허용을 위해서는 여분의 대체재, 설비를 준비해야하기 때문에 경제적 비용이 증가하며 시스템 성능 하락 또한 감수해야한다.
결함 허용 수준에 대한 논의는 결함을 허용하고자 하는 자원이 결함 시 얼마나 시스템에 치명적인지에 대한 논의가 선행 된 후 이뤄져야 한다.