#1. OS(Operating System)
운영체제란 컴퓨터의 여러 응용 프로그램을 설치되게 해 주고 여러 가지 장치를 효율적으로 작동하도록 하며 사용자가 컴퓨터를 손쉽게 이용할 수 있도록 해 주는 프로그램의 집단이다.
- 사용자 인터페이스(User Interface)와 자원관리를 위한 프로그램의 집합
- 컴퓨터의 사용자와 하드웨어 사이에서 가교 역할을 하는 프로그램
운영체제의 목적
- 사용자에게 컴퓨터 프로그램을 효율적이고 편리하게 실행할 수 있는 환경 제공
- 컴퓨터 자원의 할당을 공정하고 효율적으로 제공
- 제어 프로그램으로 사용자 프로그램의 실행을 감독, 오류와 컴퓨터 오용을 방지
- 입출력 장치의 제어와 동작을 관리
컴퓨터 시스템의 구조
- 하드웨어
- 운영체제
- 응용 프로그램
- 사용자
일괄처리 시스템
- 다수 개의 프로그램을 읽어 저장해 놓고 한 번에 한 개씩의 프로그램을 실행시켜 주는 방식
- 프로그램들은 천공카드 위에 만들어지며 이렇게 만들어진 프로그램들을 Card Reader가 읽어 저장
- 처리속도를 향상하기 위해 유사한 요구를 필요로 하는 작업을 모아 일괄 처리(batch processing)
- 일괄처리 시스템의 문제점은 입출력 장치가 전자적 장치의 속도보다 상대적으로 느려 CPU가 쉬게 되어 낭비
다중 프로그램 시스템
- 여러 개의 프로그램을 동시에 메모리에 적재하여 하나의 프로그램이 대기 상태가 되면 그동안 다른 프로그램을 실행하는 방식
- 입출력과 프로그램의 실행을 병행으로 처리할 수 있어 CPU의 사용 효율이 증가
- 운영체제는 사용자를 대신하여 의사결정을 해야함 (작업 스케줄링, CPU 스케줄링)
- 여러 프로그램이 동시에 메모리에 상주하면서 메모리 관리가 복잡
시분할 시스템
- 정해진 시간이 되면 무조건 다음 순서의 작업을 실행하는 방식
- 교대하는 시간이 매우 짧아 프로그램이 실행되는 동안 사용자는 컴퓨터와 상호작용이 가능
- 사용자와 시스템 간에 직접 상호작용이 가능한 시스템을 대화식 컴퓨터 시스템이라 함
- 시분할 시스템은 여러 사용자가 동시에 컴퓨터를 사용할 수 있게 해 줌
- 메모리에 적재되어 실행 중인 프로그램을 프로세스(process)라 함
- 많은 사용자의 프로그램을 동시에 수행하기 위해서는 주기억장치의 용량으로 부족
- 디스크를 주기억장치의 보조 저장장치로 활용, 가상 메모리 기법 사용
#2. OS 안에는 어떤 것들이?
운영체제는 사용자 인터페이스(쉘), 장치관리, 파일관리, 메모리관리, 처리기관리 5가지 구성요소를 가진다.
- 쉘 : 사용자나 응용 프로그램이 운영체제와 의사소통 (클릭으로 파일을 여는 일..)
- 장치관리 : 주변장치(키보드, 프린터, 모니터..)를 제어
- 파일관리 : 파일을 만들고, 지우고, 수정하며, 이름을 부여, 디렉터리를 관리
- 메모리관리 : 주기억 장치의 관리, 실행될 프로그램을 위해 주기억 장치의 일정 부분을 할당, 주기억 장치 안에 있는 프로그램들의 경계를 설정하여 서로 침범하지 못하게 함.
- 처리기 관리 : CPU의 처리 능력을 각 작업에 효과적으로 배분
이러한 관리들은 서로 밀접한 연관을 가지고 실행된다.
#3. OS는 컴퓨터의 어디에 있을까?
사용자 인터페이스와 많은 관리 프로그램들이 운영체제를 이루게 되는데 이들을 크게 두 분류로 커널(Kernel)과 유틸리티 프로그램(Utility Program)으로 나눈다.
커널(Kernel)
- 운영체제의 각종 기능들 중 사용자와 실행 프로그램을 위해 매우 빈번하게 사용되는 부분
- 컴퓨터가 처음 부팅될 때에 주기억 장치에 적재되어 시스템의 운영이 종료될 때까지 계속해서 주기억 장치에 남아 있게 되는 부분
- 운영체제의 핵심이며 핵(Neucleus), 관리자(Supervisor), 메모리 상주(Memory Resident) 프로그램이라 부름
커널을 주기억 장치에 상주시키는 이유는?
운영체제 중에서 빈번하고 빨리 실행되어야 할 프로그램을 디스크에 두게 되면 디스크와 주기억 장치 사이의 입출력에 해당 하는 일이 생기게 되고 이는 많은 시간을 요구하기 되어 시스템의 성능을 떨어뜨린다.
운영체제의 대부분을 커널로 하면 될 텐데 왜 유틸리티라는 것을 따로 떼어 냈을까?
한정된 용량의 주기억 장치에 운영체제가 거의 대부분을 차지할 경우 사용자 프로그램이 올라올 공간이 매우 줄어들게 되어 많은 사용자 프로그램이 효과적으로 실행되지 못하게 된다.
유저 모드로 실행 중 커널 모드에서 해야 할 일이 생기면 어떻게 할까?
커널 프로그램밖에 할 수 없는 종류의 일을 해야 하는 경우 시스템 호출(System Call)을 하게 되고 이후 그 일을 해줄 운영체제 프로그램이 커널 모드에서 실행된 다음 다시 사용자 프로그램으로 복귀한다.
#4. 그 외 운영체제 상식
레지스터
- CPU는 여러 개의 레지스터를 가지고 있고 레지스터는 메모리보다 빠른 기억 장치
- 데이터, 주소, 조건 코드 레지스터 등이 있음
- CPU의 연산을 제어하기 위한 레지스터로 MBR, MAR, IR, PC 등이 있음.
인터럽트(Interrupt)
운영체제가 자원을 효율적으로 관리하기 위해서는 각 자원들의 현 상황을 파악할 수 있는 방법이 필요하다.
먼저 잘 알려진 방법으로 폴링(Polling)이라는 것이 있으며 이것은 CPU가 일정한 시간 간격을 두고 각 자원들의 상태를 주기적으로 확인하는 방식이다. 하지만 폴링은 각 자원들의 직전 폴링 이후 변환된 자신의 상태를 다음번 폴링 때까지 알릴 수 없다는 문제가 있다. 또한, 아무 일이 없었는데도 CPU는 폴링에 일정량의 시간을 들여야 하는 부담도 있다.
인터럽트는 각 자원들이 능동적으로 자신의 상태변화를 CPU에게 알리는 방식이다. CPU는 따로 시간을 들이지 않아도 되고 자원들은 상황이 발생하면 즉시 알려 처리를 받을 수 있어 폴링보다 우수한 시스템이다.
인터럽트는 어떻게 처리될까? (Context Switching)
- 장치가 인터럽트 신호를 CPU에게 보낸다.
- CPU가 명령어 실행 중이면 명령어의 실행을 완료시키고 인터럽트 신호를 확인
- 인터럽트 처리 후 다시 실행될 현재 실행 중이던 프로그램 정보(PWS, PC레지스터)를 시스템 스택에 저장
- 인터럽트 처리 루틴의 시작 주소를 PC(Program Counter)에 넣어 실행
- 인터럽트 처리가 끝나면 이전에 저장했던 레지스터 값들을 다시 재저장
- PSW와 PC 값들을 원래 자리에 다시 넣어주고 실행
기억 장치의 계층적 구조 (Storage Hierarchy)
- 저장장치의 계층 구조에 위에 위치할수록 속도는 빠르지만 고가이다. 또한 위에 위치할 수록 휘발성이다.
- 두 저장장치(레지스터와 주기억 장치)의 속도 차이는 중간에 빠른 캐시를 설치하여 극복할 수 있다.
- 시스템을 구성할 때 저장장치의 계층구조를 균형 있게 잘 구성하면 저렴한 가격에 높은 성능을 얻는다.
참고 자료
- OS? Oh Yes , 김주균 지음
'OS' 카테고리의 다른 글
[OS] 메모리 관리 (0) | 2020.05.10 |
---|---|
[OS] 교착 상태(Deadlock) (0) | 2020.05.09 |
[OS] 병행 프로세스와 동기화 (0) | 2020.05.09 |
[OS] CPU 스케줄링(Scheduling) (0) | 2020.05.08 |
[OS] 프로세스와 스레드 (0) | 2020.05.08 |