컴퓨터와 컴퓨터 사용자 간의 중재자 역할을 하는 프로그램이다.
(정확한 정의가 없다.)
- 사용자 프로그램을 실행하고 사용자 문제를 쉽게 해결하는 것
- 컴퓨터 시스템을 사용하기 쉽게 만드는 것
- 컴퓨터 하드웨어를 효율적으로 사용
시스템 관점의 정의
- 운영체제는 최고의 자원 할당자(resource allocator)이다.
- 모든 자원을 관리한다.
- 운영체제는 제어 프로그램(control program)이다.
- 에러를 방지하고 컴퓨터의 부적절한 사용을 방지하기 위해 프로그램으 실행을 제어한다.
- 일반적인 정의로 운영체제는 컴퓨터에서 항상 실행하는 한 개의 프로그램으로 커널(kernel)이라 한다.
부트스트랩 프로그램 (bootstrap program)
- 전원을 키거나 재부팅 될 때 사용
- 시스템 모든 장치 (HW) 를 초기화
- 운영체제의 커널을 메모리에 적재(Loader) 하고 실행한다.
- 운영체제는 인터럽트(Interrupt) 기반으로 동작한다.
- HW나 SW에서 이벤트가 발생하면 이를 인터럽트 를 사용해 시스템에 알린다.
- CPU가 인터럽트 되면, CPU는 하던 일을 멈추고(suspend) ,즉시 고정된 위치 로 실행을 옮겨 인터럽트를 처리한다.
- 인터럽트 구조에서 인터럽트 당한 명령의 주소 는 저장 되어야 한다.
인터럽트는 인터럽트 벡터를 사용하여 제어를 인터럽트 서비스 루틴으로 넘긴다.
- 인터럽트 벡터는 모든 서비스 루틴의 주소를 가지고 있다.
- 요청
- 인터럽트가 발생해 CPU에 처리 요청
- 중단
- CPU에서 처리 중이었던 프로세스 중단
- 보관
- 이전 작업을 인터럽트 처리 후 재개해야 하기 때문에 정보를 보관해 놓는
PCB(Process Control Block)을 이용 -> PCB안에 PC가 저장되어 있다
- 처리
- ISR(Interrupt Service Routine) = Interrupt Handler 대로 처리
- 재개
- PCB 안 저장된 정보들로 다시 처리 중이었던 프로세스로 돌아온다.
저장장치는 계층 구조를 이루고, 계층이 높을수록 속도가 빠르고 가격이 올라가는 특징이 있다.
- 저장 장치 계층 구조상에서 자료 이동은 운영체제 관점에서 명시적(explicitly) 또는 묵시적으로(implicitly) 이루어진다.
- 캐시 <-> CPU, 레지스터 : 묵시적(운영체제 관여없이 하드웨어에 의해서)
- 메모리 <-> 디스크 : 명시적(운영체제가 관할)
- 사용되고 있는 정보가 느린 저장장치에서 빠른 저장장치로 복사되어 일시적으로 머무는 것
- 정보가 빠른 저장장치(캐시) 에 있는지 먼저 확인하고 있으면 캐시에서 정보를 가지고 오고 없으면, 자료가 캐시에 복사되고 캐시에서 사용된다.
- 캐시는 캐시되는 저장장치보다 크기가 작다.
- 다중처리기 환경에서는 캐시의 일관성(cache coherence)을 유지하여 모든 CPU가 자신의 캐시에 최신 값을 가지고 있어야 한다.
- 고속의 입출력 장치가 메모리 속도에 근접하는 속도로 정보를 전송할 때 사용.
- 장치 제어기가 버퍼 스토리지에서 주저장 장치에 CPU의 관여없이 직접 데이터 블록을 전송.
- 대부분의 시스템은 한 개의 범용 프로세서를 사용한다.
- 디스크/키보드/그래픽 제어기
- 입출력 처리기
- 병렬시스템(Parallel systems) , 강결합 시스템(Tightly-coupled systems) 이라고도 한다.
- 향상된 처리량
- 규모의 경제
- 향상된 신뢰성 (각각 독립적이기 때문에 하나가 죽어도 영향이 없다.)
- 비대칭적 다중처리 (Asymmetric Multiprocessing) - 주 처리기가 시스템 제어, 각 처리기에 특정 태스크 할당, 주종관계
- 대칭적 다중처리(Symmetric Multiprocessing) - 모든 처리기가 대등 (위의 사진이 대칭적 다중처리 구조 이다.)
- 단일 프로그래밍은 그림과 같이 한번에 하나씩만 실행 가능하다.
- 사용자가 CPU와 입출력장치를 계속 사용할 수 없다.
- CPU가 항상 하나 이상의 작업을 실행할 수 있게 구성되있다.
- 단일 프로그래밍의 단점을 보완하고 효율성을 위해 필요하다.
- 작업 스케줄러가 한 개의 작업을 선택하여 CPU에 할당한다.
- 커널(Kernel)이 최상단에 위치한 다음에 프로그램이 쌓인다.
- 다중 프로그래밍의 논리적 확장
- 시분할은 사용자가 컴퓨터의 자원을 효율적으로 공유(sharing)하는 것이다.
- CPU가 다수의 작업들을 매우 빈번하게 교대로 실행하여 사용자들은 자신의 작업과 상호작용 할 수 있다. ( 응답시간이 1초 이내 여야 한다.)
- 이중 동작모드가 운영체제와 다른 시스템 부분들을 보호한다.
- CPU가 명령어를 실행하는 모드를 사용자 모드 와 커널 모드로 구분한다.
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 모드
- 일반적 응용 프로그램은 기본적으로 사용자 모드로 실행
(일반적 응용 프로그램은 자원에 접근할 수 없음)
- 운영체제 서비스를 제공받을 수 있는 실행 모드
- 커널 영역의 코드를 실행할 수 있는 모드
- 자원에 접근하는 명령어를 비롯한 모든 명령어 실행 가능
- 운영체제를 커널 모드로 전환하려면 시스템 콜(System Calls)을 해야한다.
- 운영체제 모드를 커널 모드로 전환하는 방법
- 일종의 소프트웨어 인터럽트 이다. (특정 명령어에 의해 발생하는 인터럽트)
- 시스템 콜을 빈번히 발생시키고 모드를 오가며 실행한다.
- 타이머는 무한 루프나 주어진 시간에 특정 일이 발생하는지 감시하는 기능이다.
- 특정 동작이 안넘어가면 타이머가 리셋을 시킨다.
- 운영체제가 카운터 값을 감소시키고 카운터가 0이 되면 인터럽트가 발생한다.
- 타이머 인터럽트 발생 시 운영체제가 제어한다.
프로세스란?
- 실행 중인 프로그램 (program in execution)
- 시스템에서 작업의 한 단위
- 프로그램은 수동적 개체, 프로세스는 능동적 개체
프로세스는 업무 수행을 위한 자원이 필요하다.
- CPU,저장장치,입출력장치,파일
- 초기화 자료
프로세스 종료 후 재사용 가능한 자원은 회수한다.
- 사용자(시스템) 프로세스 생성과 제거
- CPU에 프로세스와 쓰레드 스케줄링
- 프로세스 일시 중지와 재실행
- 프로세스 동기화를 위한 기법 제공
- 프로세스 통신을 위한 기법 제공
- 데드락(deadlock) 처리를 위한 기법 제공
- 모든 자료는 처리 전과 후에 메모리에 있게 된다. (CPU가 직접 Access하는 곳은 메모리다.)
- 메모리의 어느 부분이 현재 사용되고 있으며 누가 사용하고 있는지 추적
- 필요에 따라 메모리 공간 할당 및 회수
- 운영체제의 목적 중 하나는 사용자로부터 특정 하드웨어 장치의 특성을 숨기는 것이다.
입출력 메모리 관리
- 버퍼링 : 자료 이동 중에 일시적인 자료 보관
- 캐싱 : 성능을 위해 자료의 일부분을 보관
- 스풀링(spooling) : 프린터 같은 장치에서 한 작업의 출력이 다른 작업의 출력과 동시에 작업
- 보호(protection) : 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스 또는 사용자들의 접근을 제어하는 기법
- 보안(security) : 외부 또는 내부의 공격을 방어하는 것