운영체제 강의(이화여대,반효경 교수님)를 듣고 정리한 내용입니다.
1 운영체제 개요
운영 체제란?
컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층
- 좁은 의미의 운영체제
- 커널
- 운영체제의 핵심 부분으로 메모리에 상주하는 부분
- 넓은 의미의 운영체제
- 메모리에 상주하지 않는 별도의 프로그램들
- 커널뿐만 아니라 각종 주변 시스템 유틸리티를 포함한 개념
운영 체체의 목적
- 컴퓨터 시스템의 자원을 효율적으로 관리
- 프로세서, 기억장치, 입출력 장치 등을 효율적으로 관리
- 사용자간의 형평성 있는 자원분배(형평성)
- 주어진 자원으로 최대한의 성능을 내도록 (효율성)
- 프로세서, 기억장치, 입출력 장치 등을 효율적으로 관리
- 사용자 및 운영체제 자신의 보호
- 프로세스,파일,메시지 등 관리
- 컴퓨터 시스템을 편리하게 사용할 수 있는 환경 제공
- 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨터에서 수행되는 것 같은 환상 제공
운영 체제의 분류
세가지 기준으로 분류할 수 있다.
동시 작업 가능 여부에 따른 분류
- 단일 작업(Single Tasking)
- 한번에 하나의 작업만 처리
- 다중 작업 (Multi Tasking)
- 동시에 두 개 이상의 작업 처리
- 한 명령의 수행이 끝나기 전에 다른 명령이나 프로그램을 수행 가능.
사용자의 수에 따른 분류
- 단일 사용자
- MS-DOS, MS Windows
- 다중 사용자
- UNIX, NT server
처리 방식에 따른 분류
- 일괄 처리 (batch processing)
- 작업 요청의 일정량을 모아서 한번에 처리
- 작업이 완전히 종료될 때 까지 기다려야 함.
- 시 분할(time sharing)
- 여러 작업이 수행 될 때 처리능력을 일정한 시간 단위로 분할하여 사용.
- 일괄 처리 시스템에 비해 짧은 응답 시간을 가짐
- 사용자는 본인의 요청을 바로 결과로 볼 수 있으므로 Interactive한 방식으로 생각할 수 있다.
- 작업을 수행해야하는 데드라인 시간이 존재하지 않음.
- 실시간 (Realtime OS)
- 정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 시스템
- 반도체 장비, 로봇 제어, 미사일 제어 등 시간이 엄격하게 관리되어야 하는 시스템에서 사용.
요즘 일반적인 사용자가 사용하는 운영체제는 다중 작업, 다중 사용자, 시분할 방식을 지원한다. 그러나 최근 모바일 기기의 등장으로 다른 처리 방식의 필요성 대두됨.
ex) 네비게이션의 길 안내는 정해진 시간 안에 나오도록 보장되어야 함.
몇 가지 용어
- 여러 작업을 동시에 수행하는 것을 뜻하는 용어
- Multitasking
- Multi Programming : 여러 프로그램이 메모리에 올라가있음.
- Time Sharing : CPU의 시간을 분할 하여 나누어씀을 강조
- Multi Process
Multi processor : 하나의 컴퓨터에 CPU가 여러개 붙어 있음을 의미.
운영 체제의 예
유닉스와 윈도우 계열 운영체제 존재
유닉스
- 코드의 대부분이 C로 작성됨
- 높은 이식성
- 다른 컴퓨터에서 C언어를 다시 컴파일 하면 되므로 이식이 쉬움
- 최소한의 커널 구조
- 복잡한 시스템에 맞게 확장 용이
- 소스코드 공개
- 프로그램 개발에 용이
- 다양한 버전
- Linux , SunOs,Solaris 등
윈도우
- MS 사의 다중 작업용 GUI 기반 운영체제
- Plug and Play, 네트워크 환경 강화
- 불안정성
- 풍부한 지원 소프트웨어
운영 체제의 구조
운영체제의 역할
- CPU 스케줄링 : 어떤 작업에게 CPU를 할당하는지
- 메모리 관리 : 한정된 메모리를 나누어 쓰는 방법
- 파일 관리 : 디스크에 파일을 보관하는 방법
- IO 관리 : 느린 IO 디바이스와 어떻게 컴퓨터가 정보를 주고 받을지 정한다.
- 프로세스 관리
- 그 외
- 보호
- 네트워킹
- 명령어 해석
2 시스템 구조 및 프로그램의 실행 Part-1
컴퓨터 시스템 구조
- CPU와 메모리로 구성된 컴퓨터와 IO 디바이스로 이루어짐.
- 각 IO 디바이스 마다 디바이스 컨트롤러가 있어서 작은 cpu역할을 함.
- local buffer : IO 디바이스를 처리하기 위한 처리 공간
- DMA controller : IO장치로부터 인터럽트를 받으면 local buffer를 읽어서 최종 IO를 처리를 끝낸 후 CPU에게 인터럽트를 보낸다.
Mode bit
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하는 보호 장치
- 하드웨어적으로 두 가지 모드의 Opreation을 지원한다.
- 1 사용자 모드 : 사용자 프로그램 수행
- 0 모니터 모드(커널 모드, 시스템 모드) : OS 코드 수행
- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한
특권 명령
으로 규정. - interrupt나 Exception 발생시 하드웨어가 mode bit 을 0으로 바꾼다.
- 사용자 프로그램에 CPU를 넘기기 전에 mode bit 을 1로 셋팅
- 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한
Timer
- 특정 프로그램이 운영체제를 독점하는 것을 막기 위한 것
- 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트 발생
- 매 클럭 틱 마다 1씩 감소
- 0이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- Time Sharing을 구현하기 위해 널리 이용됨.
- 현재 시간을 계산하기 위해서도 사용된다.
Device Controller
- I/O divice controller
- 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
- 제어 정보를 위해 control register, status registr를 가진다.
- local buffer (일종의 data register)
- IO는 실제 디바이스와 local buffer사이에서 일어남.
- Divice Controller는 IO가 끝났을 경우 CPU에게 인터럽트로 알림.
- divce driver (장치 구동기) : OS 코드 중 각 장치별 처리 루틴 -> software
- device controller (장치 제어기) : 각 장치를 통제하는 일종의 작은 CPU -> hardware
입출력과 인터럽트 (Input-Output and Interrupt)
입출력(I/O)의 수행
- 모든 사용자 입출력 명령은 특권 명령
- 사용자 프로그램이 I/O 하는 과정
- 시스템 콜 ( 사용자 프로그램은 운영 체제에게 I/O 요청)
- trap 을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권을 인터럽트 벡터가 가리키는 인터럽스 서비스 루틴으로 이동
- 올바른 I/O요청인지 확인 후 수행
- I/O완료시 제어권을 시스템콜 다음 명령으로 옮김.
인터럽트
- 인터럽트 당한 시점의 레지스터와 프로그램 카운터를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- Interrupt(넓은 의미)
- Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
- Trap (소프트웨어 인터럽트) :
- Exception : 프로그램이 오류를 범한 경우
- System call : 프로그램이 커널 함수를 호출하는 경우
- 관련 용어
- 인터럽트 백터
- 해당 인터럽트 처리 루틴 주소를 가지고 있음.
- 인터럽트 처리 루틴 (= 인터럽트 핸들러)
- 해당 인터럽트를 처리하는 커널 함수
- 인터럽트 백터
시스템 콜 (System Call)
- 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
2 시스템 구조 및 프로그램의 실행 Part-2
동기식 입출력과 비동기식 입출력
- 동기식 입출력 (Synchronous I/O)
- I/O 요청 후 입출력 작업이 완료된 후에어 제어가 사용자 프로그램에 넘어감.
- 구현 방법 1
- I/O 가 끝날 때 까지 CPU를 낭비시킴
- 매시점 하나의 I/O 만 일어날 수 있음
- 구현 방법 2
- I/O 가 완료될 때 까지 해당 프로그램에게서 CPU를 뻇음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄세움
- 다른 프로그램에 CPU를 줌
- 비동기식 입출력 (Asynchronous I/O)
- I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감
두 경우 모두 I/O 의 완료는 인터럽트로 알려준다.
DMA (Direct Memory Access)
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU 중재 없이 디바이스 컨트롤러가 디바이스 버퍼의 내요을 메모리에 블록 단위로 직접 전송
- 바이트 단위가 아니라 블록 단위로 인터럽트 발생 시킴.
서로 다른 입출력 명령어
- I/O 를 수행하는 special instruction에 의해
- Memory Mapped I/O에 의해
- IO 장치도 메모리의 주소를 맵핑해서 메모리 주소로 접근 가능할 수있게 하는 방법
저장장치 계층 구조
프로그램의 실행 (메모리 load)
-
커널 주소 공간의 내용
사용자 프로그램이 사용하는 함수
- 함수
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함스
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 자신의 프로그램의 실행 파일에 포함되어 있다.
- 커널 함수
- 운영체제 프로그램의 함수
- 커널 함수의 호출 = 시스템 콜
- 사용자 정의 함수