운영체제란?
디바이스를 유연하고 예측 가능한 방식으로 동작할수 있도록 하기 위해 소프트웨어와 하드웨어를 제어하는 프로그램
컴퓨터 하드웨어와 컴퓨터 사용자 간의 매개체 역할을 하는 시스템 소프트웨어이며, 컴퓨터의 시스템을 편리하게 이용할 수 있고 자원(CPU, IO, HDD, Memory)을 잘 관리해 주는 것이다.
따라서 자원 관리를 잘 해주는 것이 좋은 운영체제라고 말할 수 있음
운영체제 컴포넌트
- 프로세스 관리
- 메모리 관리
- 파일 관리
- 장치 관리
프로세스 : 메인 메모리에서 실행 중인 현재 프로그램
운영체제 종류
일괄처리 운영체제
다량의 작업을 모아서 한꺼번에 일괄적으로 처리하는 자동화 방식
다량의 데이터를 처리하거나 단순 반복 처리, 초창기 컴퓨터에서 주로 사용했음
한번에 하나의 프로그램 수행, 운영체제는 항상 메모리에 상주
처리 속도를 향상시키기 위해 유사한 요구를 필요로 하는 작업을 일괄처리 함
장점 : 유사한 작업들을 일괄로 처리하면서 처리 속도 향상
단점 : 작업이 실행되고 있는 중에 사용자와 상호 작용 부족, CPU 이용률 낮음, 작업 준비시간이 많이 소요사용 예시 : 급여 계산, 전화, 전기 및 수도 요금 계산 업무
멀티 프로그래밍 운영체제
일괄처리 방식이 CPU를 비효율적으로 사용하기 때문에, 이를 개선한 것이 멀티 프로그래밍 시스템
이 방식은 CPU 유휴 시간에 다른 프로세스를 처리하여, 입출력 장치와의 속도 차이를 해소
따라서 실제 CPU에서는 한 개의 프로그램만 실행되며, 나머지 프로그램은 입출력을 수행하거나 대기 상태가 됨. 이처럼 동시에 여러 개의 프로그램을 실행 할 수 있음
하나의 CPU에 여러 프로그램을 실행시키는 방법
- 메모리를 여러 부분으로 나누고, 각 부분마다 다른 작업을 할당하는 기법 이용 즉, 한 작업이 입출력을 기다리고 있을 동안 다른 작업이 CPU를 사용함
- 일괄처리 시스템의 단점을 보완했다 (동시에 여러 프로그램 실행)
- CPU 사용량이 증가, 기억장치 관리기법이 필요해졌음
- 최근 OS들은 다중 프로그래밍을 지원 중
시분할 운영체제
다수의 사용자가 컴퓨터를 공유할 수 있도록, 각 사용자들에게 CPU에 대한 일정시간 (Time Slice)을 할당하여 주어진 시간동안 컴퓨터를 사용할 수 있는 시스템
멀티 프로세서 시스템 (병렬 시스템)
한 시스템에 2개 이상의 CPU를 갖는 시스템
단일 운영체제에 의해 관리, 서버용 OS에서 주로 사용
여러 개의 CPU(프로세서)가 메모리를 공유하는 시스템 ( = 강결합 시스템 )
장점 : 작업 처리속도 향상, 하나의 CPU가 고장나도 다른 CPU로 처리 가능, 신뢰성, 안정성
단점 : CPU간 기억장치 공유 및 스케줄링이 복잡, 응용 프로그램 개발 시 복잡
실시간 운영체제
한정된 시간 제약 조건에서 자료를 분석 처리하는 방식
주로 기계 제어 시스템에서 사용
데이터 발생 즉시, 또는 데이터 처리 요구 시 즉시 처리함
매우 빠른 입력 및 처리 속도를 가진 OS
실시간 시스템 OS = RTOS(Real Time OS)라고 많이 부름
시스템 콜 (System call)
프로세스가 하드웨어 직접 접근해서 필요한 기능을 사용할 수 있도록 해주는 것
운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
커널 (Kernel)
운영체제의 핵심 부분으로, 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공함
시스템의 자원은 제한되어 있지만, 프로그램은 많기 때문에 커널은 프로그램의 수행 상태인 프로세스 간의 보안 접근을 책임지는 소프트웨어다.
커널이 이러한 프로세스마다 얼마만큼의 자원을 사용해야 하는 결정을 해야함
(= 스케줄링)
컨텍스트 스위칭 (Context-switching)
프로세스에서 다른 프로세스로 제어를 변경해야 할 때, 이전 프로세스의 상태를 저장하고 새로운 프로세스의 저장된 상태를 불러오는 것
협동 프로세스 (co-operating processes)
상호간 데이터로 자원을 공유하는 프로세스들
프로세스들은 서로간 통신 기능(분산 시스템에서 자주 사용)을 사용
(ex. 채팅 프로그램)
스레드 (Thread)
프로세스 내에서 동작되는 여러 실행의 흐름
프로세스 내의 주소 공간이나 자원들을 대부분 공유하면서 실행함
가벼운 프로세스로 불리는 스레드는 CPU 활용의 기본 단위
- 스레드 아이디, 프로그램 카운터, 레지스터 세트, 스택으로 구성
프로세스 동기화 (Process synchronization)
여러 프로세스들이 동일한 데이터를 동시에 접근하고, 실행의 결과가 특정한 접근이 일어나는 순서에 달려 있을 때 요구되는 것
경쟁 상태를 방지하기 위해 한번에 하나의 프로세스가 동일한 데이터를 조작하도록 해야 함
위험 영역 문제 (Critical Section)
위험 영역 : 공통 변수들을 변경, 테이블을 갱신, 파일 작성 등의 프로세스의 코드 세그먼트
주어진 시간에 오직 하나의 프로세스만 위험 영역에 진입 가능
위험 영역 문제는 프로세스들이 협동을 위해 사용할 수 있는 프로토콜을 설계 하는 것
위험 영역 요구 사항 3가지 : 상호 배제, 진행, 한정 대기
교착 상태 (Deadlock)
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만 기다리고 있어서 결과적으로 아무것도 완료하지 못하는 상태를 말함
세마포어 (Semaphor)
프로세스 간 메시지를 전송하거나, 공유 메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있음
세마포어란, 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해주는 것
즉, 복잡한 위험 영역 문제를 풀기 위해 사용되는 동기화 도구
대기와 신호만을 가질 수 있는 정수형 변수로 되어있음
가상 메모리 (Virtual Memory)
실제 물리적인 메모리 공간(RAM) 외에 하드 디스크에 파일 형태로 따로 준비하는 가상의 메모리 공간을 말함
부족한 시스템 메모리를 보조해주는 역할을 한다
캐시 (Cache)
사용자의 속도 향상을 위해 자주 사용되는 데이터를 보관하는 기능
하드웨어와 CPU 중간에서 적절한 속도를 유지하기 위해 존재
캐시 메모리 (Cache Memory)
프로세서에 가장 빈번히 전달되어야 하는 명령어와 데이터를 원활히 전송할 수 있도록 제작된 특수 메모리
캐시 메모리에 저장된 데이터는 주기억장치에 있을 때보다 약 10배는 빠름
컴파일러와 인터프리터
컴파일러 : 원시 프로그램이나 고급 언어로 작성된 문장을 컴퓨터가 사용할 수 있는 기계어로 번역해주는 프로그램
실행 : 원시 프로그램 → 컴파일러 → 목적 프로그램
인터프리터 : 고급 언어로 작성된 명령문들을 한 번에 한 줄씩 번역하고 실행하는 프로그램
실행 : 원시프로그램 → 인터프리터 → 실행 명령문
둘의 차이점은? 컴파일러는 디스크에 저장, 인터프리터는 ROM에 저장
컴파일러는 프로그램 단위로 전체를 함께 번역하고 수행하기 때문에, 번역 시간이 조금 걸리고 수행 속도가 빠름. 인터프리터는 한 줄마다 번역하고 수행하기 때문에 수행 속도가 느림 ( CPU 사용 시간 낭비 )
컴파일러는 프로그램을 번역한 뒤, 기계어 저장을 위해 메모리를 많이 사용함. 하지만 인터프리터는 한 줄씩 번역하고 바로 실행하기 때문에 메모리 사용 없음
따라서, 컴파일러는 실행 시간의 효율을 중시하는 프로그래밍 언어에서 사용하고 인터프리터는 사용자의 융통성을 중시하는 프로그래밍 언어에서 사용
선점, 비선점 스케줄링
선점 스케줄링: 우선 순위가 높은 다른 프로세스가 할당된 CPU를 강제로 뺏는 방법
비선점 스케줄링 : 프로세스에게 이미 할당된 CPU를 강제로 뺏을 수 없고, 사용 끝날 때까지 기다려야 하는 방법
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Deadlock (0) | 2019.03.31 |
---|---|
[운영체제] 뮤텍스(Mutex) & 세마포어(Semaphore) (2) | 2019.03.31 |
[운영체제] CPU 스케줄링 (1) | 2019.03.03 |
[운영체제] 스케줄러 (0) | 2019.02.23 |
[운영체제] 프로세스/스레드 (0) | 2019.02.16 |