4과목 프로그래밍 언어 활용 응용 SW 기초 기술 활용 149 ~ 156
149. 운영체제의 개념
: 컴퓨터 시스템의 자원들을 효율적으로 관리하며 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임.
사용자 |
응용 프로그램 |
유틸리티 |
운영체제 |
하드웨어 |
1) 목적 : 처리 능력(Throughput) 향상, 반환 시간(Turn Around Time) 단축, 사용 가능도(Availability) 향상, 신뢰도(Reliability) 향상
2) 구성
- 제어 프로그램 (감.작.데. 깜짝데이트)
- 감시 프로그램
- 작업 관리 프로그램
- 데이터 관리 프로그램
- 처리 프로그램 : 제어 프로그램의 지시를 받아 사용자가 요구한 문제를 해결하기 위한 프로그램
- 언어 번역 프로그램 : 컴파일러, 어셈블러, 인터프리터
- 서비스 프로그램 : 분류/병합, 유틸리티 프로그램
3) 기능
- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리.
- 자원의 스케줄링 기능 제공 (어떤 자원을 누가 언제 어떤 방식으로 사용할지를 결정해 주는 것)
- 사용자와 시스템 간의 편리한 인터페이스 제공
- 데이터 관리, 자원 공유
- 시스템 오류 검사 복구
- 자원보호 기능
- 입출력에 대한 보조 기능 제공
- 가상 계산기 기능 제공
150. Windows
- 주요 특징
1) GUI (Graphic User Interface) : 키보드로 명령어를 입력하지 않고, 마우스로 아이콘이나 메뉴를 선택하여 작업 수행.
2) 선점형 멀티태스킹 (Preemptive Multi-Tasking) : 동시에 여러개의 프로그램을 실행하는 멀티태스킹을 하면서 운영체제가 각 작업의 CPU 이용시간을 제어하여 프로그램 실행 중 문제가 발생하면 해당 프로그램을 강제 종료시키고 모든 시스템 자원을 반환하는 방식.
3) PnP (Plug and Play 자동감지 기능) : 컴퓨터 시스템에 프린터나 사운드 카드 등의 하드웨어를 설치했을 때, 해당 하드웨어를 사용하는 데 필요한 시스템 환경을 운영체제가 자동으로 구성해주는 기능.
4) OLE (Object Linking and Embedding) ; 다른 응용 프로그램에서 작성된 문자나 그림 등의 개체를 현재 작성중인 문서에 자유롭게 연결하거나 삽입하여 편집할 수 있게 하는 기능.
- 긴 파일명 최대 255자까지
- Single-User 시스템.
151. UNIX / LINUX / MacOS
1) UNIX : 시분할 시스템을 위해 설계된 대화식 운영체제. (Opne System)
- C언어로 작성 > 이식성이 높으며 장치, 프로세스 간의 호환성이 높음.
- 다중 사용자, 다중 작업 지원
- 통신망 관리용 운영체제로 적합
- 트리구조 파일 시스템
- 전문적인 프로그램 개발에 용이
- 다양한 유틸리티 프로그램 존재.
- 구성
사용자 |
유틸리티 |
쉘 |
커널 |
하드웨어 |
- 커널 : 하드웨어를 보호하고, 프로그램과 하드웨어 간의 인터페이스 역할을 담당. (프로세스 관리, 기억장치 관리, 파일 관리, 입출력 관리, 프로세스간 통신, 데이터 전송 및 변환 등)
- 쉘 : 사용자의 명령어를 인식하여 프로그램 호출, 명령을 수행하는 명령어 해석기. DOS에서 COMMAND. COM과 같은 기능 수행. / 파이프라인 기능을 지원.
- 유틸리티 프로그램 : 일반 사용자가 작성한 응용 프로그램을 처리하는데 사용. DOS에서 외부 명령어 (에디터, 컴파일러, 인터프리터, 디버거)
2) LINUX : UNIX 기반으로 개발한 운영체제. 대부분이 UNIX와 비슷. 다양한 플랫폼에 설치 사용 가능.
3) MacOS : 애플 사 생산 제품만 가능. UNIX 기반. 드라이버 설치 및 install, uninstall 과정이 단순.
- 파일 디스크립터 : 파일을 관리하기 위한 시스템이 필요로 하는 파일에 대한 정보를 가진 제어 블록을 의미. (파일 제어 블록)
152. 기억장치 관리의 개요
1) 기억장치 계층 구조의 특징
레지스터 |
캐시 기억장치 |
주기억장치 |
보조기억장치 |
- 상위 기억장치일수록 접근속도와 접근 시간이 빠르지만, 기억용량이 적고 고가이다.
- 주기억장치는 각기 자신의 주소를 갖는 워드 또는 바이트들로 구성되어 있으며, 주소를 이용하여 액세스할 수 있다.
- 레지스터, 캐시, 주기억장치의 프로그램이나 데이터 > CPU가 직접 액세스 할 수 있음
보조기억장치의 프로그램이나 데이터 > 직접 액세스 불가. 주기억장칭에 적재된 후 CPU에 의해 액세스 될 수 있다.
2) 기억장치 관리 전략 : 보조기억장치의 프로그램이나 데이터를 주기억장치에 적재시키는 시기, 적재 위치 등을 지정하여 한정된 주기억장치의 공간을 효율적으로 사용하기 위한 것.
- 반입 (Fetch) 전략 : 보조기억장치에 보관중인 프로그램/데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략
- 요구 반입 : 프로그램/데이터의 참조를 요구할 때 적재
- 예상 반입 : 참조될 프로그램/데이터를 미리 예상하여 적재
- 배치 (Placement) 전략 : 새로 반입되는 프로그램이나 데이터를 주기억장치의 어디에 위치시킬지 결정하는 전략
- 최초 적합 : 프로그램/데이터가 들어갈 수 있는 크기의 빈 영역 중에서 첫번째 분할 영역에 배치
- 최적 적합 : 단편화를 가장 작게 남기는 분할 영역에 배치
- 최악 적합 : 단편화를 가장 많이 남기는 분할 영역에 배치
- 교체 (Replacement) 전략 : 주기억장치의 모든 영역이 이미 사용중인 상태에서 새로운 프로그램이나 데이터를 주기억장치에 배치하려고 할 때 이미 사용되고 있는 영역 중에서 어느 영역을 교체하여 사용할 것인지를 결정하는 전략.
- 전략 : FIFO(First In First Out), OPT, LRU(Least Recently Used), LFU(Least Frequently Used), NUR, SCR
153. 주기억장치 할당 기법
: 프로그램이나 데이터를 실행시키기 위해 주기억장치에 어떻게 할당할 것인지에 대한 내용.
- 연속 할당 기법 : 프로그램을 주기억장치에 연속으로 할당. >> 단일 분할 할당 기법 / 다중 분할 할당 기법
- 분산 할당 기법 : 프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법. >> 페이징 기법 / 세그멘테이션 기법
1) 단일 분할 할당 기법 : 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법.
- 운영체제를 보호하고, 프로그램이 사용자 영역만을 사용하기 위해 운영체제 영역과 사용자 영역을 구분하는 경계 레지스터가 사용됨.
- 프로그램 크기가 작을 경우 사용자 영역이 낭비될 수 있음.
- 오버레이 기법 : 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법.
- 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램 실행.
- > 주기억장치의 공간이 부족하면 적재된 프로그램 중 불필요한 조각이 위치한 장소에 새로운 프로그램 조각을 중첩(overlay)하여 적재.
- > 프로그래머는 시스템 구조나 프로그램 구조를 알아야 한다.
- 스와핑 기법 : 하나의 프로그램 전체를 주기억장치에 할당 > 사용하다가 필요에 따라 다른 프로그램과 교체.
- swap out : 주기억장치에 있는 프로그램이 보조기억장치로 이동
- swap in : 보조기억장치에 있는 프로그램이 주기억장치로 이동.
2) 다중 분할 할당 기법
- 고정 분할 할당 (MFT) (정적 할당기법 ) : 프로그램을 할당하기 전에 운영체제가 주기억장치의 사용자 영역을 여러개의 고정된 크기로 분할 > 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행.
- 분할된 영역보다 프로그램이 커서 영역 안에 들어갈 수 없는 경우 발생.
- 내부 단편화 및 외부 단편화가 발생하여 낭비가 많음.
- 실행 프로그램의 크기를 미리 알고 있어야 함.
- 가변 분할 할당 (MVT) (동적 할당기법) : 미리 분할해놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분한.
- 다중 프로그램의 정도를 높일 수 있다.
- 프로세스 크기에 대한 제약이 적음
- 영역과 영역 사이에 단편화 발생 가능성.
154. 가상기억장치 구현 기법 / 페이지 교체 알고리즘
- 가상기억장치 : 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것. (용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용)
- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용.
- 다중 프로그래밍 효율 높일 수 있음
- 주소 변환 작업이 필요
- 단편화 해결
1) 페이징 기법 : 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법.
- 페이지 프레임 : 페이지 크기로 일정하게 나누어진 주기억장치의 단위
- 외부 단편화 X, 내부 단편화 발생가능
- 주소 변환을 위해 페이지 맵 테이블이 필요 > 비용 증가, 처리 속도 감소.
2) 세그먼테이션 기법 : 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법.
- 세그먼트 : 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위. (고유한 이름과 크기를 가짐)
- 기억공간을 절약하기 위해 사용
- 주소 변환을 위해 세그먼트 맵 테이블 필요
- 기억장치 보호키가 필요 (적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없음)
- 내부 단편화 X, 외부 단편화 가능성
- 가상주소 : 세그먼트 번호(s) + 세그먼트 내에 실제 내용이 위치하고 있는 곳까지의 거리 변위값(d)
- 실기억주소 : 세그먼트 기준번지+변위값
- 세그먼트 맵 테이블 : 세그먼트 번호(s) + 세금먼트 크기(L)+주기억장치 상의 기준번지(b)
3) 페이지 교체 알고리즘 : 페이지 부재가 발생했을 때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법.
- OTP(OPTimal replacement) : 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체
- FIFO(First In First Out) : 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체
- LRU(Least Recently Used) : 최근에 가장 오랫동안 사용하지 않은 페이지 교체
- LFU (Least Frequently Used) : 사용 빈도가 가장 적은 페이지를 교체
- NUR (Not Used Recently) : 최근에 사용하지 않은 페이지를 교체.
- SCR (Second Chance Replacement) : 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지.
155. 가상기억장치 기타 관리 사항
1) 페이지 크기
: 페이지의 크기에 따라 시스템에 미치는 영향이 다르다.
- 페이지 크기가 작을 경우 :
- 페이지 단편화 감소.
- 효율적인 워킹 셋 유지
- Locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아짐
- 페이지 정보를 갖는 페이지 맵 테이블 크기가 커지고, 매핑 속도가 늦어짐
- 디스크 접근 횟수가 많아져서 전체적인 입출력 시간이 늘어남
- 페이지 크기가 클 경우 :
- 페이지 맵 테이블 크기가 작아지고, 매핑 속도가 빨라짐
- 디스크 접근 횟수가 줄어들어 전체적인 입출력 효율성이 증가
- 페이지 단편화가 증가됨.
- 프로세스 수행에 불필요한 내용까지도 주기억장치에 적재될 수 있음
- 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어남
- 페이지 단편화 증가
2) Locality : 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론.
- 시간 구역성 : 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스하는 현상. (한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미.)
- >> Loop, Stack, 부 프로그램, counting, 집계에 사용되는 변수
- 공간 구역성 : 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상. (어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미.)
- >> 배열 순회, 순차적 코드의 실행, 개발자가 관련 변수들을 서로 근처에 선언하여 할당되는 기억장소, 같은 영역에 있는 변수를 참조할 때 사용.
3) 워킹 셋(working set) : 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합. Locality 특징을 이용함.
- 자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정됨.
- 시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋도 시간에 따라 변경됨.
4) 페이지 부재 빈도 방식
- 페이지 부재 : 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상.
- 페이지 부재 빈도 : 페이지 부재가 일어나는 횟수
- 페이지 부재 빈도 방식 : 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식.
- 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당 & 페이지 부재율을 감시하다가 부재율이 상한선을 넘으면 > 프레임 증가, 하한선을 넘으면 > 페이지 프레임 회수하는 방식.
5) 프리페이징(Prepaging)
: 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법. (사용되지 않는 페이지가 많을 수도 있음)
6) 스래싱(Thrashing) : 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상.
- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 > 자주 페이지 부재가 발생함으로써 나타남.
- 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고 CPU 이용률이 급격히 낮아짐
- 스래싱 현상 방지 방법 :
- 다중 프로그래밍 정도를 적정 수준으로 유지
- 페이지 부재 빈도를 조절하여 사용
- 워킹 셋을 유지
- 부족한 자원을 증설 & 일부 프로세스를 중단
- CPU 성능에 대한 자료의 지속적 관리 및 분석으로 임계치 예상하여 운영.
156. 프로세스의 개요
: 프로세서(CPU)에 의해 처리되는 사용자 프로그램
1) 프로세스의 정의
- PCB(Process Control Block)를 가진 프로그램
- 실기억장치에 저장된 프로그램
- 프로세서가 할당되는 실체로서 디스패치가 가능한 단위
- 프로시저가 활동중인 것
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위해 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 운영체제가 관리하는 실행 단위.
2) PCB
: 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳.
- 프로세스가 생성될 때마다 고유의 PCB가 생성됨/ 완료되면 제거됨.
- 프로세스의 현재 상태, 포인터, 프로세스 고유 식별자, 스케줄링 및 프로세스의 우선순위, CPU 레지스터 정보, 주기억장치 관리 정보, 입출력 상태 정보, 계정 정보
3) 프로세스 상태 전이 : 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것.
- 제출 (submit) : 작업 처리 위해 작업을 시스템에 제출
- 접수 (hold) : 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태
- 준비 (ready) : 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태 (준비상태 큐에서 준비)
- 실행 (run) : 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태.
- 대기(wait), 보류, 블록(block) : 실행중인 프로세스에 입출력 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이됨.
- 종료 (terminated, exit) : 프로세스 실행이 끝나고 프로세스 할당이 해제된 상태.
- 관련 용어
- Dispatch : 준비 상태에서 대기중인 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정.
- Wake up : 입출력 작업이 완료 > 대기상태에서 준비상태로 전이되는 과정
- Spooling : 다중 프로그래밍 시스템 성능 향상을 위해 > 입출력할 데이터를 직접 입출력장치에 보내지 않고 나중에 한꺼번에 입출력하기 위해 디스크에 저장
- 교통량 제어기 : 프로세스의 상태에 대한 조사와 통보 담당.
4) 스레드(Thread)
: 프로세스 내에서의 작업 단위. 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위
- 단일 스레드 (하나의 프로세스에 하나의 스레드) / 다중 스레드 (하나 이상의 스레드 존재)
- 독립적인 스케줄링의 최소 단위로서 프로세스의 역할 담당.
- 사용자 수준의 스레드 : 사용자가 만든 라이브러리를 사용하여 스레드 운용. / 속도 빠름/ 구현 어려움
- 커널 수준의 스레드 : 운영체제의 커널에 의해 스레드 운용. / 구현 쉬움 / 속도 느림
- 장점 : 병행성 증진 / 하드웨어 운영체제의 성능과 응용 프로그램의 처리율 향상 / 응용 프로그램 응답 시간 단축 / 기억장소의 낭비 줄어듦. / 프로세스간 통신 향상 / 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신.