운영체제 (Operating system) 는 컴퓨터 하드웨어를 관리하는 프로그램. (커널이라고도 불린다)
=> 컴퓨터 시스템을 유용하게 만드는 과정에서 발생하는 문제점을 해결하기 위한 합리적인 방법 제공.
운영체제란 무엇인가?
- Interface between the user and the hardware
- 기본 서비스 제공 (프로세스, 스케줄링, 메모리관리, 파일시스템, 네트워킹)
- 다수의 application,user를 공평하고 효율적인 방법으로 조정
- 사용하기 편리하고 효율적이게 만든다.
OS의 기능 :
1. Concurrency (동시병렬)
- 다수의 프로세스가 한번에, 프로세스는 상호배타적으로 공유자원에 접근, cpu스케줄링,자원관리
2. 메모리 관리 ( 프로세스를 메모리에 적재, 프로세스를 디스크와 메모리 사이에 이동)
3. 파일 시스템 ( 저장공간)
4. 네트워크, 분산 컴퓨팅
5. 보안, 보호
컴퓨터 시스템의 근본적인 목적이 사용자 프로그램을 실행하고, 사용자 문제의 해결을 보다 쉽게 해주는 데 있고, 이러한 목적을 위해 H/W 가 제작되었다.
순수 하드웨어만으로는 사용하기가 쉽지 않아, 응용 프로그램이 개발되었고
다양한 프로그램들은 I/O 장치의 통제와 같은 공통적인 연산을 필요로 한다.
따라서 자원을 제어하고 할당하는 기능을 하나의 SW로 통합한 것이 운영체제.
컴퓨터 시스템의 구성요소 4가지 : 하드웨어, 운영체제, 응용 프로그램 및 사용자
하드웨어 : 중앙처리장치, 메모리 및 입출력 장치
응용프로그램 : 사용자의 계산문제를 해결하기 위해 이들 자원이 어떻게 사용될 것인지를 정의한 것
현대의 범용 컴퓨터 : 공유 메모리에 대한 접근을 제공하는 공통 버스를 통해 연결. 여러개의 I/O 장치와 하나 이상의 CPU로 구성.
I/O장치와 CPU는 메모리 cycle 을 얻기 위해 경쟁하면서 Concurrency 하게 작동
초기 프로그램(Bootstrap program)은 시스템의 모든 면을 초기화하고, 운영체제를 적재하는 방법 및 실행을 시작하는 방법을 알아야 한다.
위와 같은 그림처럼 공통 버스(BUS) 에 묶여 메모리를 공유하고 있다.
특정 이벤트(event)가 발생하면, 하드웨어,소프트웨어로부터 발생한 인터럽트(interrupt) 에 의해 신호가 보내어진다.
시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시키고, 소프트웨어는 시스템 호출(System call)이라 불리는 특별한 연산을 실행하여 인터럽트를 발생시킬 수 있다.
if CPU가 인터럽트 되면, CPU는 하던일을 중단하고, 현재 자신의 주소를 저장한다.(복귀 주소를 PC(Program Counter)에 저장) 그리고 인터럽트 서비스 루틴으로 빠져 수행하게 된다.
인터럽트 서비스 루틴이 완료되면, CPU 는 하다 만 연산을 마저 마무리 하게 된다. (인터럽트 고유의 핸들러를 호출)
인터럽트 종류:
동기적 방식의 폴링 : CPU는 I/O가 진행할동안 기다림. 계속적으로 poll을 통해 확인.
비동기적 방식 : CPU와 I/O가 동시병렬적으로 작동.
CPU는 오직 메모리로부터 명령을 적재, 실행하고자 하는 프로그램은 모두 메모리에 저장되어야 한다.
RAM(Random-Access-Memory) : 읽기-쓰기가 가능한 메모리.(주메모리)
- 한계) 1. 용량이 작다.
2. 휘발성 저장장치(전원 공급 안되면 내용 잃어버림)
ROM(Read-Only-Memory) : 읽기만 가능한 메모리
적재 ( 주 메모리 -> CPU 내부의 레지스터)
저장 ( CPU 내부의 레지스터 -> 주 메모리)
메모리 장치는 단지 연속적인 메모리 주소만을 인식한다는 사실에 유의!
따라서, 보조 저장장치를 제공한다. 보조 저장장치간의 차이점은 속도,가격,크기,휘발성
(* 플래시 메모리 : DRAM 에 비해 속도는 느리지만 데이터를 유지하기 위한 전원을 필요로 하지 않는다.)
저장장치 계층은 아래와 같다.
( Locality of Reference (참조의 지역성) : 동일한 값 또는 해당 값에 관계된 스토리지 위치가 자주 액세스되는 특성 ) 을 통해
Caching 이 발생 ( 더 high한 level 로 copy되는 특성)
각각의 I/O장치는 각각 디바이스 드라이버를 가지고 있으며, 디바이스 드라이버는 I/O 장치의 동작을 이해하고 OS의 다른 부분들에게 일관된 인터페이스를 제공한다.
데이터 전송 완료되면, I/O 장치는 인터럽트를 이용하여 데이터전송이 완료되었음을 디바이스 드라이버에게 통보하고, 디바이스 드라이버는 상태정보를 반환한다. (대용량 데이터 전송 시, 높은 오버헤드를 초래한다.)
따라서, 오버헤드를 막기 위해 DMA(Direct Memory Access)장치가 사용되며, CPU의 개입없이 데이터 블록 전체를 전송한다.(비동기적)
참고 : operating system concepts (공룡책)
다음번에는 컴퓨터구조에 대해서 다룸. ( 병렬, 분산, 실시간..등)