정보처리기사 필기 - 3과목 운영체제


2장 프로세스 관리


084 프로세스의 개요


① 프로세스의 정의


· 프로세스(Process)는 일반적으로 프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램, 즉 실행중인 프로그램을 의미하며, 작업(Job), 테스크(Task)라고도 함

· 프로세스는 다음과 같이 여러 형태로 정의 가능

- PCB를 가진 프로그램

- 실기억장치에 저장된 프로그램

- 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위

- 프로시저가 활동중인 것

- 비동기적 행위를 일으키는 주체

- 지정된 결과를 얻기 위한 일련의 계통적 동작

- 목적 또는 결과에 따라 발생되는 사건들의 과정

- 운영체제가 관리하는 실행 단위


② PCB


· PCB(Process Control Block, 프로세스 제어 블록)는 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓는 곳으로, Task Control Block 또는 Job Control Block이라고도 함

· 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됨

· PCB에 저장되어 있는 정보

 저장 정보

 설명

 프로세스의 현재 상태

 준비, 대기, 실행 등의 프로세스 상태

 포인터

 · 부모 프로세스에 대한 포인터 : 부모 프로세스의 주소 기억

 · 자식 프로세스에 대한 포인터 : 자식 프로세스의 주소 기억

 · 프로세스가 위치한 메모리에 대한 포인터 : 현재 프로세스가 위치한 주소 기억

 · 할당된 자원에 대한 포인터 : 프로세스에 할당된 각 자원에 대한 주소 기억

 프로세스 고유 식별자

 프로세스를 구분할 수 있는 고유 번호

 스케줄링 및 프로세스의 우선순위

 스케줄링 정보 및 프로세스가 실행될 우선순위

 CPU 레지스터 정보

 Accumulator, Index Register, 범용 레지스터, PC 등에 대한 정보

 주기억장치 관리 정보

 Base Register, Page Table에 대한 정보

 입·출력 상태 정보

 입·출력장치, 개방된 파일 목록

 계정 정보

 CPU 사용 시간, 실제 사용 시간, 한정된 시간


③ 프로세스 상태 전이


프로세스 상태 전이는 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변화는 것을 의미하며, 프로세스의 상태를 다음과 같이 상태 전이도로 표시

[그림 1] 상태 전이도

프로세스 상태

프로세스 상태는 제출, 접수, 준비, 실행, 대기(보류) 상태로 나눌 수 있으며, 이 중 주요 세 가지 상태는 준비, 실행, 대기 상태

· 제출(Submit) : 작업을 처리학 위해 사용자가 작업을 시스템에 제출한 상태

· 접수(Hold) : 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태

· 준비(Ready)

- 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태

- 프로세스는 준비상태 큐(스케줄링 큐)에서 실행 준비중(준비상태 큐 : 여러 프로세스가 프로세서를 할당받기 위해 기다리는 장소)

- 접수 상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행됨

· 실행(Run)

- 준비상태 큐에 있는 프로세스가 프로세서를 할당 받아 실해오디는 상태

- 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료(Time Run Out)되면 프로세스는 준비 상태로 전이됨

- 실행중인 프로세스에 ·출력(I/O) 처리가 필요하면 실행중인 프로세스는 대기 상태로 전이됨

- 준비 상태에서 실행 상태로의 전이는 CPU(프로세서) 스케줄러에 의해 수행됨

· 대기(Wait), 보류, 블록(Block) : 프로세스에 입·출력 처리가 필요하면 현재 실행중인 프로세스가 중단되고, 입·출력 처리가 완료될 때까지 대기하고 있는 상태

· 종료(Terminated, Exit) : 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태

※ 실행 중지(Suspend)

· 하나의 프로세스가 입·출력 이외의 다른 이유에 의해 실행되지 못하는 상태

· 실행 중지된 프로세스는 다른 프로세스로 다시 시작하기 전까지는 실행될 수 없음

· 프로세스의 실행 중지 요인

- 시스템에 이상이 있거나 부하가 많을 경우 운영체제의 필요에 의해 중지시킴

- 프로세스의 이상 유무를 확인하기 위해 해당 프로세스를 완전히 종료시키지 않고 중지시킴


프로세스 상태 전이 관련 용어

· Dispatch : 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정

· Wake Up : 입·출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정

· 교통량 제어기(Traffic Controller) : 프로세스의 상태에 대한 조사와 통보 담당


④ 스레드


스레드(Thread)는 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위


· 하나의 프로세스에 하나의 스레드가 존재하는 경우에는 단일 스레드, 하나 이상의 스레드가 존재하는 경우에는 다중 스레드라고 함

· 프로세스의 일부 특성을 갖고 있기 때문에 경량(Light Weight) 프로세스라고도 함

· 스레드 기반 시스템에서 스레드는 독립적인 스케줄링의 최소 단위로서 프로세스의 역할 담당

· 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능함

· 스레드의 분류

 사용자 수준의 스레드

 · 사용자가 만든 라이브러리를 사용하여 스레드 운용

 · 속도는 빠르지만 구현 어려움

 커널 수준의 스레드

 · 운영체제의 커널에 의해 스레드 운용

 · 구현이 쉽지만 속도 느림

· 스레드 사용의 장점

- 하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있음

- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율 향상 가능

- 응용 프로그램의 응답 시간 단축 가능

- 실행 환경을 공유시켜 기억 장소의 낭비 줄어듦

- 프로세스들 간의 통신 향상

- 스레드는 공통적으로 접근 가능한 기억장치를 통해 효율적으로 통신함



085 스케줄링


① 스케줄링의 개요


· 스케줄링(Scheduling)은 프로세스가 생성되어 실행될 때 필요한 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업

· 프로세스가 생성되어 완료될 때까지 프로셋는 여러 종류의 스케줄링 과정을 거치게 됨

· 스케줄링 종류

 장기 스케줄링

 · 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 준비상태 큐로 보내는 작업

 · 작업 스케줄링(Job Scheduling), 상위 스케줄링이라고도 하며, 작업 스케줄러에 의해 수행됨

 중기 스케줄링

 · 어떤 프로세스들이 CPU를 할당받을 것인지를 결정하는 작업을 의미함

 · CPU를 할당받으려는 프로세스가 많을 경우 프로세스를 일시 보류시킨 후 활성화해서 일시적으로 부하를 조절함

 단기 스케줄링

 · 프로세스가 실행되기 위해 CPU를 할당받응 시기와 특정 프로세스를 지정하는 작업

 · 프로세서 스케줄링(Processor Scheduling), 하위 스케줄링이락도 함

 · 프로세서 스케줄링 및 문맥 교환은 프로세서 스케줄러에 의해 수행됨

※ 문맥 교환(Context Switching)

· 하나의 프로세스에서 다른 프로세스로 CPU가 할당되는 과정에서 발생되는 것으로 새로운 프로세스에 CPU를 할당하기 위해 현재 CPU가 할당된 프로세스의 상태 정보를 저장하고, 새로운 프로세스의 상태 정보를 설정한 후 CPU를 할당하여 실행되도록 하는 작업


② 스케줄링의 목적


스케줄링은 CPU나 자원을 효율적으로 사용하기 위한 정책


· 공정성 : 모든 프로세스에 공정하게 할당

· 처리율(량) 증가 : 단위 시간당 프로세스를 처리하는 비율(양)을 증가시킴

· CPU 이용률 증가 : 프로세스 실행 과정에서 주기억장치를 액세스한다든지, 입·출력 명령 실행 등의 원인에 의해 발생할 수 있는 CPU의 낭비 시간을 줄이고, CPU가 순수하게 프로세스를 실행하는데 사용되는 시간 비율을 증가시킴

· 우선순위 제도 : 우선순위가 높은 프로세스 먼저 실행

· 오버헤드 최소화 : 오버헤드 최소화

· 응답시간(Response Time, 반응 시간) 최소화 : 작업을 지시하고, 반응하기 시작하는 시간을 최소화

· 반환시간(Turn Around Time) 최소화 : 프로세스를 제출한 시간부터 실행이 완료될 때까지 걸리는 시간을 최소화

· 대기 시간 최소화 : 프로세스가 준비상태 큐에서 대기하는 시간을 최소화

· 균형 있는 자원의 사용 : 메모리, 입·출력장치 등의 자원을 균형 있게 사용

· 무한 연기 회피 : 자원을 사용하기 위해 무한정 연기되는 상태를 회피


③ 프로세서 스케줄링(프로세스 스케줄링) 기법


비선점(Non-Preemptive) 스케줄링

· 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법

· 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용함

· 모든 프로세스에 대한 요구를 공정하게 처리 가능

· 프로세스 응답 시간의 예측이 용이하며, 일괄 처리 방식에 적합

· 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있음

· 비선점 스케줄링의 종류에는 FCFS, SJF, 우선순위, HRN, 기한부 등의 알고리즘


선점(Preemptive) 스케줄링

· 하나의 프로세스가 CPU를 할당 받아 실행하고 있을 때 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗아 사용할 수 있는 스케줄링 기법

· 우선순위가 높은 프로세스를 빠르게 처리 가능

· 주로 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 사용됨

· 많은 오버헤드(Overhead) 초래함

· 선점이 가능하도록 일정 시간 배당에 대한 인터럽트용 타이머 클록(Clock)이 필요

· 선점 스케줄링의 종류에는 Round Robin, SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐 등의 알고리즘


 비선점 스케줄링

 FCFS

 SJF

 우선순위

 HRN

 기한부

 선점 스케줄링

 RR

 SRT

 선점 우선순위

 다단계 큐

 다단계 피드백 큐



086 비선점 스케줄링


① 비선점 스케줄링의 개요


· FCFS, SJF, HRN, 우선순위, 기반후 알고리즘· 


② FCFS(First Come First Service, 선입 선출) = FIFO(First In First Out)


· FCFS는 준비상태 큐(대기 큐, 준비 완료 리스트, 작업준비 큐, 스케줄링 큐)에 도착한 순서에 따라 차례로 CPU를 할당하는 기법으로, 가장 간단한 알고리즘

· 먼저 도착한 것이 먼저 처리되어 공평성은 유지되지만 짧은 작업이 긴 작업을, 중요한 작업이 중요하지 않은 작업을 기다리게 됨


③ SJF(Shorted Job First, 단기 작업 우선)


· SJF는 준비상태 큐에서 기다리고 있는 프로세스들 중에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 기법

· 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘

· 실행 시간이 긴 프로세스는 실행 시간이 짧은 프로세스에게 할당 순위가 밀려 무한 연기 상태가 발생될 수 있음


④ HRN(Highest Response-ratio Next)


· 실행 시간이 긴 프로세스에 불리한 SJF 기법을 보완하기 위한 것으로, 대기 시간과 서비스(실행) 시간을 이용하는 기법

· 우선순위 계산 공식을 이용하여 서비스(실행) 시간이 짧은 프로세스나 대기 시간이 긴 프로세스에게 우선순위를 주어 CPU를 할당함

· 서비스 실행 시간이 짧거나 대기 시간이긴 프로세스 일 경우 우선순위가 높아짐

· 우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은 순으로 우선순위 부여됨

· 우선순위 계산식 = (대기 시간+서비스(실행) 시간) / 서비스(실행) 시간


⑤ 기한부(Deadline)


· 프로세스에게 일정한 시간을 주어 그 시간 안에 프로세스를 완료하도록 하는 기법

· 프로세스가 제한된 시간 안에 완료되지 않을 경우 제거되거나 처음부터 다시 실행해야 함

· 시스템을 프로세스에게 할당할 정확한 시간을 추정해야 하며, 이를 위해서 사용자는 시스템이 요구한 프로세스에 대해 정확한 정보를 제공해야 함

· 여러 프로세스들이 동시에 실행되면 스케줄링이 복잡해지며, 프로세스 실행 시 집중적으로 요구되는 자원 관리에 오버헤드 발생


⑥ 우선순위(Priority)


· 준비 상태 큐에서 기다리는 각 프로세스마다 우선순위를 부여하여 그 중 가장 높은 프로세스에게 먼저 CPU를 할당하는 기법

· 우선순위가 동일할 경우 FCFS 기법으로 CPU 할당

· 우선순위는 프로세스의 종류나 특성에 따라 다르게 부여될 수 있음

· 가장 낮은 순위를 부여받은 프로세스는 무한 연기 또는 기아 상태(프로세스를 완료하지 못하는 상태)가 발생할 수 있음


※ 에이징(Aging) 기법

· 시스템에서 특정 프로세스의 우선순위가 낮아 무한정 기다리게 되는 경우, 한 번 양보하거나 기다린 시간에 비례하여 일정 시간이 지나면 우선순위를 한 단계씩 높여 가까운 시간 안에 자원을 할당받도록 하는 기법

· SJF나 우선순위 기법에서 발생할 수 있는 무한 연기 상태, 기아 상태 예방 가능



087 선점 스케줄링


선점 스케줄링 : 선점 우선순위, SRT, RR, 다단계 큐, 다단계 피드백 큐 알고리즘


① 선점 우선순위


· 준비상태 큐의 프로세스들 중에서 우선순위가 가장 높은 프로세스에게 먼저 CPU 할당하는 기법

· 비선점 우선순위 기법을 선점 형태로 변경한 것으로, 준비상태 큐에 새로 들어온 프로세스의 순위가 높을 경우 현재의 프로세스를 보류하고 새로운 프로세스 실행


② SRT(Shortest Remaining Time)


· 비선점 스케줄링인 SJF 기법을 선점 형태로 변경한 기법으로, 선점 SJF 기법이라고도 함

· 현재 실행중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실행 시간을 비교하여 가장 짧은 실행 시간을 요구하는 프로세스에게 CPU를 할당하는 기법으로, 시분할 시스템에 유용

· 준비상태 큐에 있는 각 프로세스의 실행 시간을 추적하여 보유하고 있어야 하므로 오버헤드 증가


③ RR(Round Robin)


· 시분할 시스템(Time Sharing System)을 위해 고안된 방식으로, FCFS(FIFO)알고리즘을 선점 형태로 변형한 기법

· FCFS 기법과 같이 준비상태 큐에 먼저 들어온 프로세스가 먼저 CPU를 할당받지만 각 프로세스는 시간 할당량(Time Slice, Quantum) 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주고 준비 상태 큐의 가장 뒤로 배치됨

· 할당되는 시간이 클 경우 FCFS 기법과 같아지고, 할당되는 시간이 작을 경우 문맥 교환 및 오버헤드가 자주 발생되더 요청된 작업을 신속히 처리할 수 없음

· 할당되는 시간의 크기가 작으면 작은 프로세스들에게 유리함


④ 다단계 큐(MQ; Multi-level Queue)


· 프로세스를 특정 그룹으로 분류할 수 있을 경우 그룹에 따라 각기 다른 준비상태 큐를 사용하는 기법

· 일반적으로 프로세스 우선순위에 따라 시스템 프로세스, 대화형 프로세스, 편집 프로세스, 일괄 처리 프로세스 등으로 나누어 준비상태 큐를 상위, 중위, 하위 단계로 배치

· 각 준비상태 큐는 독자적인 스케줄링을 가지고 있으므로 각 그룹의 특성에 따라 서로 다른 스케줄링 기법 사용 가능

· 프로세스가 특정 그룹의 준비상태 큐에 들어갈 경우 다른 준비 상태 큐로 이동 가능

· 하위 단계 준비상태 큐에 있는 프로세스를 실행하는 도중이라도 상위 단계 준비상태 큐에 프로세스가 들어오면 상위 단계 프로세스에게 CPU를 할당해야 함


⑤ 다단계 피드백 큐(MFQ; Multi-level Feedback Queue)


· 특정 그룹의 준비상태 큐에 들어간 프로세스가 다른 준비상태 큐로 이동할 수 없는 다단계 큐 기법을 준비상태 큐 사이를 이동할 수 있도록 개선한 기법 

· 적응 기법(Adaptive Mechanism, 시스템이 유동적인 상태 변화에 적절히 반응하도록 하는 기법)의 개념 적용

· 각 준비상태 큐마다 시간 할당량을 부여하여 그 시간동안 완료하지 못한 프로세스는 다음 단계의 준비상태 큐로 이동됨

· 상위 단계 준비상태 큐일수록 우선순위가 높고, 시간 할당량이 적음

· 요구하는 시간이 적은 프로세스, 입·출력 중심의 프로세스, 낮은 우선순위에서 너무 오래 기다린 프로세스를 기준으로 높은 우선순위를 할당함

· 하위 단계 준비상태 큐에 있는 프로세스를 실행하는 도중이라도 상위 단계 준비 상태 큐에 프로세스가 들어오면 상위 단계 프로세스에게 CPU를 할당하며, 마지막 단계 큐에서는 작업이 완료될 때까지 RR 스케줄링 기법을 사용함



088 병행 프로세스와 상호 배제


① 병행 프로세스


병행 프로세스(Concurrent Process)는 두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것을 의미


· 여러 프로세스들이 독립적으로 실행되는 것을 독립적 병행 프로세스, 서로 협력하며 동시에 실행되는 것을 협동적 병행 프로세스라고 함

· 병행 프로세스는 다중 처리 시스템이나 분산 처리 시스템에서 중요한 개념으로 사용됨


② 임계 구역


임계 구역(Critical Section)은 다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 지정된 공유 자원(영역)을 의미


· 임계 구역에는 하나의 프로세스만 접근 가능하며, 해당 프로세스가 자원을 반납한 후에만 다른 프로세스가 자원이나 데이터 사용 가능

· 임계 구역은 특정 프로세스가 독점할 수 없으며, 임계 영역에서 수행 중인 프로세스는 인터럽트 불가능

· 임계 구역의 자원이나 데이터는 여러 프로세스가 사용해야 하므로 임계 구역 내에서의 작업은 신속하게 이루어져야 함

· 프로세스가 임계 구역에 대한 진입을 요청하면 일정 시간 내에 진입을 허락해야 함

· 현재 임계 구역에서 실행되는 프로세스가 없다면 임계 구역 사용을 기다리고 있는 잔류 영역에 있는 프로세스의 사용을 허락해야 하며, 그 이외에 있는 프로세스는 임계 구역에 진입 불가능


③ 상호 배제 기법


상호 배제(Mutual Exclusion)는 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법


· 여러 프로세스가 동시에 공우 자원을 사용할 때 각 프로세스가 번갈아가며 공유 자원를 사용하는 것으로, 임계 구역을 유지하는 기법

· 상호 배제 기법을 구현하기 위한 방법에는 소프트웨어적 구현과 하드웨어적 구현이 있음


소프트웨어적 구현 방법

· 두 개의 프로세스 기준 : 데커(Dekker) 알고리즘, 피터슨(Peterson) 알고리즘

· 여러 개의 프로세스 기준 : Lamport의 빵집 알고리즘(고객이 빵집에 들어갈 때 번호를 부여하여 순서대로 빵을 제공하는 것 처럼, 각 프로세스에게 번호를 부여하고 자원을 사용하도록 하는 방법)


하드웨어적 구현 방법

· Test & Set 기법과 Swap 명령어 기법


④ 동기화 기법의 개요


동기화 기법(Synchronization)은 두 개의 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는 것으로, 상호 배제의 한 형태


· 동기화르 구현할 수 있는 방법에는 세마포어와 모니터가 있음


⑤ 세마포어(Semaphore)


· 세마포어는 '신호기', '깃발'을 뜻하며, 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 하는 기법

· 세마포어는 다익스트라가 제안했으며, P와 V라는 두 개의 연산에 의해서 동기화를 유지시키고 상호 배제의 원리를 보장함

· S는 P와 V연산으로만 접근 가능한 세마포어 변수로, 공유 자원의 개수를 나타내며 0과 1 혹은 0과 양의 값을 가질 수 있음

[그림 2] 세마포어

① 프로세스가 자원을 사용하려고 할 경우 먼저 세마포어 변수(S)를 통해 다른 프로세스가 자원을 점유하고 있는지 조사 → 자원을 사용할 수 있으면 해당 자원을 점유한 후 자원이 점유되었다는 것을 알리고, 다른 프로세스가 이미 자원을 점유한 상태라면 자원을 사용할 수 있을 때까지 기다림

· P연산 : 자원을 사용하려는 프로세스들의 진입 여부를 자원의 개수(S)를 통해 결정하는 것으로, Wait 동작이라 함

· S = S - 1 : 자원 점유를 알리는 것으로, 자원의 개수를 감소시킴


② 프로세스가 자원 사용을 마치면 자원을 반납하므로 자원의 사용을 위해 기다리는 프로세스에게 이 사실을 알림

· V연산 : 대기중인 프로세스를 깨우는 신호(Wake Up)로서, Signal 동작이라 함

· S = S + 1 : 자원을 반납하였으므로 자원의 개수 증가시킴


- 하나의 프로세스가 S값을 변경하면 동시에 다른 프로세스가 S값을 변경할 수 없음

- 세마포어에 대한 연산은 처리중에 인터럽트되어서는 안 됨


⑥ 모니터(Monitor)


· 모니터는 동기화를 구현하기 위한 특수 프로그램 기법으로 특정 공유 자원을 프로세스에게 할당하는 데 필요한 데이터와 이 데이터를 처리하는 프로시저로 구성됨

· 자료 추상화와 정보 은폐 개념을 기초로 하여 공유 자원을 할당하기 위한 병행성 구조로 이루어져 있음

· 모니터 내의 공유 자원을 사용하려면 프로세스는 반드시 모니터의 진입부를 호출해야 함

· 외부의 프로시저는 직접 액세스할 수 없음

· 모니터의 경계에서 상호 배제가 시행됨

· 모니터에는 한 순간에 하나의 프로세스만 진입하여 자원 사용 가능

· 모니터에는 Wait와 Signal 연산이 사용됨



089 교착상태


① 교착상태의 개요


· 교착상태(Dead Lock)는 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상


② 교착상태 발생의 필요 충분 조건


교착상태가 발생하려면 네 가지 조건이 충족되어야함. 단 하나라도 충족하지 않으면 교착상태 발생하지 않음

 상호 배제(Mutual Exclusion)

 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 함

 점유와 대기(Hold and Wait)

 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 함

 비선점(Non-preemption)

 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 함

 환형 대기(Circular Wait)

 공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 함


③ 예방 기법(Prevention)


교착상태 예방 기법은 교착상태가 발생하지 않도록 사전에 시스템을 제어하는 방법으로, 교착상태 발생의 네 가지 조건 중에서 어느 하나를 제거(부정)함으로써 수행됨. 자원의 낭비가 가장 심한 기법


· 상호 배제(Mutual Exclusion) 부정 : 한 번에 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 함

· 점유및 대기(Hold and Wait) 부정 : 프로세스가 실행되기 전 필요한 모든 자원을 할당하여 프로세스 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 함

· 비선점(Non-preemption) 부정 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사요하기 위해 기다리게 함

· 환형 대기(Circular Wait) 부정 : 자원을 선형 순서로 분류하여 고유 번호를 할당하고, 각 프로세스는 현재 점유한 자원의 고유 번호보다 앞이나 뒤 어느 한쪽 방향으로만 자원을 요구하도록 하는 것


④ 회피 기법(Avoidance)


교착상태 회피 기법은 교착상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법으로, 주로 은행원 알고리즘이 사용됨


은행원 알고리즘(Banker's Algorithm)

· 은행원 알고리즘은 E. J. Dijikstra가 제안한 것으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법

· 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전 상태, 교착상태가 발생할 수 있는 상태를 불안전 상태라고 함

· 은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자(소프트웨어) 수가 일정해야 함

· 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것을 보장함


※ 은행원 알고리즘 순서와 예시

① 새로운 프로세스가 시스템에 들어가면 프로세스가 필요로 하는 자원의 최대 수를 정의. 이때 프로세스가 필요로 하는 자원의 수는 시스템에 존재하는 최대 자원 수를 초과할 수 없음

프로세스가 자원을 요구할 때 시스템은 이 자원을 할당한 후에도 시스템을 안전 상태에 머무르게 하는가를 결정해야 하며 안전 상태에 있으면 자원을 할당하고, 그렇지 않으면 필요한 자원이 반납될 때가지 기다림


⑤ 발견 기법(Detection)


교착상태 발견 기법은 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것을 의미


· 교착상태 발견 알고리즘과 자원 할당 그래프 등 사용 


⑥ 회복 기법(Recovery)


교착상태 회복 기법은 교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것

 프로세스 종료

 교착상태에 있는 프로세스를 종료하는 것으로, 교착상태에 있는 모든 프로세스를 종료하는 방법과 교착상태에 있는 프로세스들을 하나씩 종료해 가며 교착상태를 해결하는 방법이 있음

 자원 선점

 · 교착상태의 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하며, 해당 프로세스를 일시 정지 시키는 방법

 · 우선순위가 낮은 프로세스, 수행된 정도가 적은 프로세스, 사용되는 자원이 적은 프로세스 등을 위주로 해당 프로세스의 자원을 선점함




출처 : 2017 시나공 정보처리기사 필기

'정보처리기사 > 운영체제' 카테고리의 다른 글

6장 운영체제의 실제  (0) 2017.02.12
5장 분산 운영체제  (0) 2017.02.12
4장 정보 관리  (0) 2017.02.12
3장 기억장치 관리  (0) 2017.02.10
1장 운영체제의 개요  (0) 2017.02.10

정보처리기사 필기 - 3과목 운영체제


1장 운영체제의 개요


077 시스템 소프트웨어의 개념과 구성


① 시스템 소프트웨어의 개념


· 시스템 소프트웨어는 시스템 전체는 작동시키는 프로그램으로, 프로그램을 주기억장치에 적재시키거나 인터럽트 관리, 장치 관리, 언어 번역 등의 기능 담당

· 시스템 소프트웨어의 가장 대표적인 프로그램으로 운영체제가 있으며 그 외에는 언어 번역 프로그램, 매크로 프로세서, 링커, 라이브러리, 정렬/합병 프로그램, 로더 등이 있음


② 시스템 소프트웨어의 구성


· 시스템 소프트웨어 기능별로 분류


제어 프로그램

- 감시 프로그램

- 작업 제어 프로그램 : Job Scheduler, Master Scheduler

- 자료 관리 프로그램


처리 프로그램

- 언어 버역기 : 어셈블러, 컴파일러, 인터프리터

- 서비스 프로그램 : 연결 편집기, 정렬/합병 프로그램, 라이브러리안, 유틸리티 프로그램

- 문제 프로그램


③ 제어 프로그램(Control Program)


제어 프로그램은 시스템 전체의 작동 상태 감시, 작업의 순서 지정, 작업에 사용되는 데이터 관리 등의 역할을 수행하는 것으로 다음과 같이 구분


· 감시 프로그램(Supervisor Program) : 제어 프로그램 중 가장 중요한 역할을 담당하는 것으로, 각종 프로그램의 실행과 시스템 전체의 작동 상태를 감시·감독하는 프로그램

· 작업 제어 프로그램(Job Control Program) : 어떤 업무를 처리하고 다른 업무로의 이행을 자동으로 수행하기 위한 준비 및 그 처리에 대한 완료를 담당하는 프로그램으로, 작업의 연속 처리를 위한 스케줄 및 시스템 자원 할당 담당

 Job Scheduler

 여러 개의 작업을 연속적으로 처리하기 위하여 특정 작업이 끝났을 때 다음 작업을 준비시키는 역할을 하는 프로그램

 - 컴퓨터는 한순간에 두 개 이상의 동작을 동시에 수행하지 못함. 그러므로 여러 프로그램을 실행시키면 그 중 어느 하나의 프로그램만 처리하고 실행이 종료되면 그 다음 프로그램을 처리. 이때 프로그램들의 실행 순서를 정하고 준비시켜 주는 것

 Master Scheduler

 컴퓨터 시스템과 운영자(Operator) 사이에서 정보를 주고받을 수 있도록 중개자 역할을 담당하는 프로그램

 - DOS나 WINDOWS에서 명령어 처리기인 COMMAND.COM이 이 역할을 하는데, DOS를 사용하는 컴퓨터 환경을 생각해 보면 쉽게 그 역할 이해 가능. DOS 환경에서는 C:\>와 함께 커서가 나타나있을 때 사용자가 직접 명령을 입력한 후 Enter를 누르면 Master Scheduler가 그 명령을 받아들여 명령에 대한 프로그램을 찾아 실행시키고, 프로그램 실행이 끝나면 C:\>와 커서를 다시 나타내어 사용자에게 명령을 입력해도 된다는 것을 알려줌

· 자료 관리 시스템(Data Management Program) : 주기억장치와 보조기억장치 사이의 데이터 전송과 보조기억장치의 자료 갱신 및 유지보수 기능을 수행하는 프로그램


④ 처리 프로그램(Processing Program)


제어 프로그램의 지시를 받아 사용자가 요구한 문제를 해결하기 위한 프로그램으로, 언어 번역 프로그램과 서비스 프로그램, 문제 프로그램 등으로 구분하며, 다음과 같은 프로그램 과정에서 사용 가능

[그림 1] 프로그램 처리 과정

· 언어 번역 프로그램(Language Translate Program) : 원시 프로그램(Source Program)을 기계에 형태의 목적 프로그램(Obcjet Program)으로 번역하는 프로그램을, 어셈블러(Assembler), 컴파일러(Compiler), 인터프리터(Interpreter)

· 서비스 프로그램(Service Program) : 컴퓨터를 효율적으로 사용할 수 있는 사용 빈도가 높은 프로그램

 연결 편집기(Linkage Editor), 링커(Linker)

 언어 번역 프로그램이 생성한 목적 프로그램과 또 다른 목적 프로그램, 라이브러리 함수 등을 연결하여 실행 가능한 프로그램(로드 모듈)을 만드는 프로그램

 정렬/합병 프로그램(Sort/Merge Program)

 데이터를 일정한 기준으로 정렬하거나 정려로딘 두 개 이상의 파일을 하나로 합치는 프로그램

 라이브러리안(Librarian)

 프로그램의 라이브러리를 유지·관리하는 프로그램

 유틸리티 프로그램(Utility Program)

 사용자의 편의를 도모하기 위한 프로그램으로 텍스트 에디터, 디버거 등이 있음

(텍스트 에디터 : 원시프로그램, 데이터 파일 등을 작성·수정 할 수 있는 문서 편집기 프로그램

디버거 : 사용자가 작성한 프로그램의 오류를 찾아내어 수정할 수 있도록 지원하는 프로그램)

· 문제 프로그램(Problem Program) : 특정 업무 및 문제 해결을 위해 사용자가 작성한 프로그램



078 운영체제의 개념


① 운영체제의 정의


· 운영체제(OS, Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임으로 Windows 98, XP등이 여기 속함

· 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경 제공

· 사용자 / 응용 프로그램 / 유틸리티 / 운영체제 / 하드웨어


② 운영체제의 목적


운영체제의 목적 : 처리 능력 향상, 사용 가능도 향상, 신뢰도 향상, 반환 시간 단축


 처리 능력(Throughput)

 일정 시간 내에 시스템이 처리하는 일의 양

 반환 시간(Turn Around Time)

 시스템에 작업을 의뢰한 시간부터 처리가 완료될 때가지 걸린 시간

 사용 가능도(Availability)

 시스템을 사용할 필요가 있을 대 즉시 사용 가능한 정도

 신뢰도(Reliability)

 시스템이 주어진 문제를 정확하게 해결하는 정도


③ 운영체제의 기능


· 프로세서(처리기, Processor), 기억장치(주기억장치, 보조기억장치), 입·출력 장치, 파일 및 정보 등의 자원 관리

· 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능 제공(스케줄링 : 어떤 자원을 누가, 언제, 어떤 방식으로 사용할지를 결정해 주는 것)

· 사용자와 시스템 간의 편리한 인터페이스 제공

· 시스템의 각종 하드웨어와 네트워크를 관리·제어

· 데이터를 관리하고, 데이터 및 자원의 공유 기능 제공

· 시스템의 오류를 검사하고 복구함

· 자원 보호 기능 제공

· 입·출력에 대한 보조 기능 제공

· 가상 계산기 기능 제공(가상 계산기 : 한 대의 컴퓨터를 여러 대의 컴퓨터처럼 보이게 하는 가상 컴퓨터 운영체제에 의해 만들어지며 사용자의 관점에서는 가상 컴퓨터가 실제 컴퓨터처럼 보일 수도 있고 아주 다르게 보일 수도 있음)


④ 운영체제의 주요 자원 관리


 자원

 기능

 프로세스 관리

 · 프로세스 스케줄링 및 동기화 관리 담당(프로세스 : 일반적으로 실행중인 프로그램)

 · 프로세스 생성과 제거, 시작과 정지, 메시지 전달 등의 기능 담당

 기억장치 관리

 프로세스에게 메모리 할당 및 회수 관리 담당

 주변장치 관리

 입·출력장치 스케줄링 및 전반적인 관리 담당

 파일 관리

 파일의 생성과 삭제, 변경, 유지 등의 관리 담당


⑤ 운영체제의 종류


· 운영체제의 종류 : Windows98, Windows XP, UNIX, LINUX, MS-DOS

· Windows 98, Windows XP는 개인용, Windows NT, UNIX, LINUX는 서버용 운영체제

· 단일 작업 처리 시스템(Single Tasking System)

- 컴퓨터 시스템을 한 개의 작업이 독점하는 사용 방식

- DOS에서 워드 작업을 하다가 PC 통신을 하려면 워드 작업을 종료해야 함

· 다중 작업 처리 시스템(Multi-Tasking System)

- 여러 개의 프로그램을 여러 두고 다양한 작업을 동시에 진행하는 방식

- Windows 98, Windows NT, UNIX, LINUX에서 워드 작업을 하고 있는 상태에서 음악을 들으며 엑셀, 그림판 등의 프로그램을 실행시켜 놓고, 필요할 때마다 해당 프로그램으로 바로 바로 전환하여 사용 가능



079 운영체제의 기법


① 일괄 처리 시스템


일괄 처리 시스템(Batch Processing System)은 초기의 컴퓨터 시스템에서 사용된 형태로, 일정량 또는 일정 기간 도안 데이터를 모아서 한꺼번에 처리하는 방식


· 일괄 처리를 위해 적절한 작업 제어 언어(JCL; Job Control Language)를 제공해야함

· 컴퓨터 시스템을 효율적으로 사용 가능

· 반환 시간(Turn Around Time)이 늦지만 하나의 작업이 모든 자원을 독접하므로 CPU 유효시간이 줄어듦

(CPU 유효시간 : CPU의 처리 시간과 입·출력장치에서의 처리 시간 차이로 인해 CPU를 사용할 수 있는 상태임에도 CPU가 작업을 하지 않고 쉬고 있는 시간)

· 급여 시간, 지불 계산, 연말 결산 등의 업무에 사용됨


② 다중 프로그래밍 시스템


다중 프로그래밍 시스템(Multi-Programming System)은 하나의 CPU와 주기억장치를 이용하여러 개의 프로그램을 동시에 처리는 방식


· 하나의 주기억장치에 두 개 이상의 프로그램을 기억시켜 놓고, 하나의 CPU와 대화하면서 동시에 처리

· CPU의 사용률과 처리량 증가 


③ 시분할 시스템


시분할 시스템(Time Sharing System)은 여러 명의 사용자가 사용하는 시스템에서 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리해 줌으로써 각 사용자에게 독리된 컴퓨터를 사용하는 느낌을 주는 것으로, 라운드 로빈(Round Robin)방식이라고도 함


· 여러 사용자가 각자의 단말 장치를 통하여 동시에 운영체제와 대화하면서 각자의 프로그램을 실행함

· 하나의 CPU는 같은 시점에서 여러 개의 작업을 동시에 수행할 수 없기 때문에, CPU의 전체 사용 시간을 작은 작업 시간량(Time Slice, Quantum)으로 나누어서 그 시간량 동안만 번갈아가면서 CPU를 할당하여 각 작업 처리

· 다중 프로그래밍 방식과 결합하여 모든 작업이 동시에 진행되는 것처럼 대화식 처리 가능

· 시스템의 전체 효율은 좋아지나 개인별 사용자 입장에서는 반응 속도가 느려질 수 있음

· 각 작업에 대한 응답시간을 최소한으로 줄이는 것을 목적으로 하며, 하드웨어를 보다 능률적으로 사용 가능


④ 다중 처리 시스템


다중 처리 시스템(Multi-Processing System)은 여러 개의 CPU와 하나의 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식


· 하나의 CPU가 고장나더라도 다른 CPU를 이용하여 업무를 처리할 수 있으므로 시스템의 신뢰성과 안정성 높음

· 여러 CPU는 하나의 메모리를 공유하면서 단일 운영체제에 의해 관리됨

· 프로그램의 처리 속도는 빠르지만 기억장치, 입·출력 장치 등의 자원 공유에 대한 문제점을 해결해야 함


⑤ 실시간 처리 시스템


실시간 처리 시스템(Real Time Processing System)은 데이터 발생 즉시, 또는 데이터 처리 요구가 있는 즉시 처리하여 결과를 산출하는 방식


· 처리 시간 단축, 처리 비용 절감

· 우주선 운행, 교통 제어, 레이터 추적기, 핵물리학 실험 및 데이터 수집, 전화 교환장치의 제어, 은행의 온라인 업무 등 시간에 제한을 두고 수행되어야 하는 작업에 사용됨


⑥ 다중 모드 처리


다중 모드 처리(Multi-Mode Processing)는 일괄 처리 시스템, 시분할 시스템, 다중 처리 시스템, 실시간 처리 시스템에서 모두 제공하는 방식


⑦ 분산 처리 시스템


분산 처리 시스템(Distributed Processing System)은 여러 개의 컴퓨터(프로세서)를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식


· 각 단말장치나 컴퓨터 시스템은 고유의 운영체제와 CPU, 메모리를 가지고 있음

※ 운영체제 운용 기법의 발달 과정

1세대 : 일괄 처리 시스템 → 2세대 : 다중 프로그래밍 시스템/다중 처리 시스템/시분할 시스템/실시간 처리 시스템 → 3세대 : 다중 모드 4세대 : 분산 처리 시스템



080 컴파일러와 인터프리터


① 프로그래밍 언어의 개요


· 프로그래밍 언어는 컴퓨터를 이용하여 특정 문제를 해결하기 위한 프로그램을 작성하기 위해 사용되는 언어

· 프로그래밍 언어는 일반적으로 저급 언어(기계어, 어벰블리어)와 고급 언어(컴파일러 언어)로 분류됨· 


② 저급 언어


 기계어

 · 컴퓨터 직접 이해할 수 있는 언어

 · 0과 1의 2진수 형태로 표현되며 수행 시간이 빠름

 · CPU에 내장된 명령들을 직접 사용하는 것으로, 프로그램을 작성하고 이해하기가 어려움

 · 기종마다 기계어가 다르므로 언어의 호환성 없음

 어셈블리어

 · 기계어와 1:1로 대응되는 기호로 이루어진 언어로, 니모닉(Mnemonic, 상징어)언어라고도 함

 · 하드웨어 제어에 주로 사용되며, 언어의 호환성 없음

 · 컴퓨터가 직접 이해할 수 없으므로 어셈블리어로 작성된 프로그램은 어셈블러를 사용하여 기계어로 번역해야 함


③ 고급 언어


· 고급 언어(High Level Language)는 컴파일러 언어라고도 하며, 인간이 실생활에서 사용하는 자연어와 비슷한 형태 및 구조

· 하드웨어에 대한 깊은 지식 없어도 프로그램 작성과 수정 용이함

· 컴퓨터가 이해할 수 있는 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용됨

· 기계어와 어셈블리어를 제외한 C, BASIC, COBOL, ALGOL 등의 언어가 고급 언어에 해당됨


④ 컴파일러와 인터프리터의 개요


· 컴파일러와 인터프리터는 고급 언어로 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분


⑤ 컴파일러


· 컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램 생성

· 번역과 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도 빠름

· 컴파일러를 사용하는 언어 : FORTRAN, COBOL, PASCAL, C, C++, PL/1


인터프리터


· 인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램

· 프로그램이 직접 실행되므로 목적 프로그램이 생성되지 않음

· 줄 단위로 번역·실행되기 때문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠름

· 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느림

· 인터프리터를 사용하는 언어 : BASIC, SNOBOL, LISP, APL

· CPU의 사용 시간 낭비 큼 


※ 컴파일러와 인터프리터의 비교

구분

컴파일러

인터프리터

번역 단위

전체

행(줄)

목적 프로그램

생성함

생성하지 않음

실행 속도

빠름

느림

번역 속도

느림

빠름

관련 언어

FORTRAN, COBOL, C, ALGOL 등

BAIC, LISP, APL, SNOBOL 등



081 어셈블리어와 어셈블러


① 어셈블리어


어셈블리어의 개요

어셈블리어(Assembly Language)는 사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호로 기계어와 1:1로 대응시켜 코드화한 기호 언어


· 어셈블리어로 작성한 원시 프로그램은 어셈블러를 통해 목적 프로그램(기계어)으로 어셈블하는 과정 거침

· 사용자가 프로그램을 쉽게 읽고 이해 가능

· 프로그램에 기호화된 명령 및 주소 사용

· 어셈블리어의 기본 동작은 동일하지만 작성한 CPU마다 사용되는 어셈블리어가 다를 수 있음

· 어셈블리어에서 사용되는 명령

 의사(지시) 명령

 = 어셈블러 명령

 원시 프로그램을 어셈블할 때 어셈블러가 해야 할 동작을 지시하는 명령

 ex) START, END, USING, DROP, EQU 등

 실행(집행) 명령

 = 어셈블리어 명령

 데이터를 처리하는 명령

 ex) A, AH, AR, S, SR, L, LA, ST, C, BNE 등


어셈블리어의 명령어 형식

① Lable : 데이터를 기억할 기억장소, 또는 분기할 위치, 기호 상수 등에 대한 기호(Symbol)를 기술하는 부분으로 생략 가능

② OP : 명령어(OP-code)를 기술하는 부분

③ Operand : OP-code가 연산을 수행하기 위한 연산의 대상이 되는 Literal(상수, 데이터)이나 주소, Register 번호 등을 기술하는 부분


② 어셈블러와 어셈블 과정


어셈블러(Assembler)는 어셈블리어로 작성된 원시 프로그램을 기계어로 된 목적 프로그램을 어셈블하는 언어 번역 프로그램


· 어셈블리어로 작성한 원시 프로그램을 목적 프로그램으로 어셈블하는 과정은 크게 2단계(Pass)로 나누어서 수행됨

· 두 개의 Pass를 사용하면 기호를 정의하기 전에 사용할 수 있는 프로그램 작업이 용이함


 ※ 단일 패스 어셈블러와 이중 패스 어셈블러 / 크로스 어셈블러

단일 패스 어셈블러와 이중 패스 어셈블러

· 단일 패스 어셈블러(One Pass Assembler) : 원시 프로그램을 하나의 명령문을 읽는 즉시 기계어로 번역하여 목적 프로그램 만듦

· 이중 패스 어셈블러(Two Pass Assembler) : 언시 프로그램을 앞에서부터 끝까지 읽어서 1단계의 작업을 수행한 후 다시 처음부터 읽으면서 1단계에서 수행한 결과를 사용하여 완전한 목적 프로그램 만듦


크로스 어셈블러(Cross Assembler)

· 현재 사용하는 컴퓨터와는 다른 명령 형태로 동작하는 컴퓨터에서 사용할 프로그램을 어셈블 할 때 사용되는 어셈블러

· 현재 어셈블하는 컴퓨터가 아닌 어셈블된 프로그램을 실행시킬 컴퓨터에 맞게 목적 프로그램을 생성


Table의 종류 및 구성

어셈블리어를 목적 프로그램으로 번역하는 어셈블 과정에서 사용되는 주요 테이블의 종류와 의미

· 기계 명령어 테이블(MOT; Machine Operating Table) : 어셈블리어의 실행 명령에 대응하는 기계어(2진 연산 코드)에 대한 정보를 가지고 있는 테이블로, 어셈블러에 기본적으로 포함됨

· 의사 명령어 테이블(POT; Pseudo Operating Table) : 의사 명령과 그 명령을 처리하는 실행 루틴의 주소를 가지고 있는  테이블로, 어셈블러에 기본적으로 포함되어 있음

· 기호 테이블(ST; Symbol Table) : 원시 프로그램의 Label 부분에 있는 기호들을 모두 차례로 저장하는 테이블

· 리터럴 테이블(LT; Literal Table) : 원시 프로그램의 Operand 부분에 있는 Literal 들을 차례로 작성하는 테이블


Pass-1과 Pass-2 과정 비교

 구분

 Pass-1

 Pass-2

 목적

 기호와 리터럴 정의

 기호 번지에 대한 상대 번지를 생성하고, 목적 프로그램 생성

 기능

 · 기계 명령어의 길이 정의

 · 위치 계수가 (PL, LC) 관리

 · 기호들의 값을 ST에 기억

 · 사용된 리터럴들을 LT에 기억

 · 해당하는 의사 명령어 처리

 · 기계 명령어 생성

 · ST에서 기호들의 값을 찾음

 · 의사 명령어 처리

 · 리터럴 발생

 사용 관련 데이터베이스

 · 원시 프로그램(Source Program)

 · 위치 계수기(PC)

 · MOT, POT, ST, LT

 · 원시 프로그램(Source Program)의 사본

 · 위치 계수기(PC)

 · Pass-1에서 만든 ST, LT

 · MOT, POT, 베이스 레지스터 테이블

 · PRINT LINE(어셈블 결과 보고서 인쇄)

 · 목적 프로그램(Object Program)



082 매크로와 매크로 프로세서


① 매크로의 개념 및 특징


매크로(Macro)는 프로그램 작성 시 한 프로그램 내에서 동일한 코드가 반복될 경우 반복되는 코드를 한 번만 작성하여 특정 이름으로 정의한 후 그 코드가 필요할 때마다 정의된 이름을 호출하여 사용하는 것


· 일종의 부 프로그램(Sub-Program)으로 개방 서브루틴(Opened Sub-routine)이라고도 함

(매크로는 프로그램 작성 시 프로그램의 맨 위에 작성. 그래서 필요할 때마다 매크로 이름으로 매크로를 호출하여, 프로그램이 실행되면 매크로가 호출된 부분에 매크로 코드가 표시되어 확인할 수 있음. 즉 프로그램 내에서 매크로 코드를 확인할 수 있다 하여 개방 서브루틴이라고 함)

· 매크로는 문자열 바꾸기와 같이 매크로 이름이 호출되면 호출된 횟수만큼 정의된 매크로 코드가 해당 위치에 삽입되어 실행됨

· 매크로 정의 내에 또 다른 매크로 정의 가능

· 사용자의 반복적인 코드 입력 줄여줌

· 매크로 정의 형태


※ 매크로와 부 프로그램의 비교

매크로는 부 프로그램의 일종으로, 반복되는 코드를 한 번만 작성하여 사용한다는 것은 동일하지만 반복되는 코드의 처리 방식이 서로 다름

 구분

 매크로

 부 프로그램

 다른 이름

 개방 서브루틴(Opened Sub-routine)

 폐쇄 서브루틴(Closed Sub-routine)

 처리 방식

 주 프로그램의 매크로 호출 명령이 있는 위치마다 매크로 내용을 삽입하여 확장된 프로그램을 만들어 놓고 연속적으로 실행

 부 프로그램이 호출될 때마다 제어가 부 프로그램으로 넘어갔다가 다시 주 프로그램으로 복귀됨

 특징

 · 코딩이 간편해짐

 · 부 프로그램은 매크로에 비해 프로그램의 크기가 작아지고, 기억장소가 절약되지만 실행 시간은 약간 느려짐


② 매크로 관련 용어


· 매크로 정의(Macro Define) : 프로그래머가 일정한 형식에 따라 매크로를 작성하는 것

· 매크로 호출(Macro Call) : 정의된 매크로 이름을 주 프로그램에 기술하는 것

· 매크로 확장(Macro Extension) : 매크로 호출 부분에 정의된 매크로 코드를 삽입하는 것

· 매크로 라이브러리 : 여러 프로그램에서 공통적으로 자주 사용되는 매크로들을 모아 놓은 라이브러리


③ 매크로 프로세서


매크로 프로세서(Macro Processor)는 원시 프로그램에 존재하는 매크로 호출 부분에 매크로(Mecro) 프로그램을 삽입하여 확장된 원시 프로그램을 생성하는 시스템 소프트웨어


매크로 프로세서의 처리 과정

매크로가 포함된 원시 프로그램에서 매크로 프로세서는 다음과 같은 과정을 거쳐 확장된 원시 프로그램을 만듦

① 매크로 정의 인식 : 원시 프로그램 내에 매크로의 시작을 알리는 'Macro' 명령을 인식

② 매크로 정의 저장 : 매크로를 저장하기 위해 매크로 이름과 매크로 내용을 매크로 테이블에 저장

③ 매크로 호출 인식 : 주 프로그램의 명령부(Op-code)에서 매크로 이름으로 매크로 호축을 인식

④ 매크로 확장과 인수(매개 변수) 치환 : 주 프로그램의 매크로 이름 위치에 매크로 내용과 인수를 치환하여 확장된 원시 프로그램 만듦



083 링커와 로더


① 링커(Linker), 연결 편집기(Linkage Editor)


· 링커는 언어 번역 프로그램이 생성한 목적 프로그램들과 라이브러리, 또 다른 실행 프로그램(로드 모듈) 등을 연결하여 실행 가능한 로드 모듈을 만드는 시스템 소프트웨어이며 연결 편집기(Linkage Editor)라고도 함

· 연결 기능만 수행하는 로더의 한 형태로, 링커에 의해 수행되는 작업을 링킹(Linking)이라고 함


② 로더(Loader, Module Loader)의 개념

 

· 로더는 컴퓨터 내부로 정보를 들여오거나 로드 모듈을 디스크 등의 보조기억장치로부터 주기억장치에 적재하는 시스템 소프트웨어


③ 로더의 기능


로더는 기본적으로 다음과 같은 기능을 차례로 수행하지만, 로더의 각 기능을 언어 번역 프로그램 또는 링커 등의 시스템 소프트웨어가 수행할 수도 있음


· 할당(Allocation) : 실행 프로그램을 실행시키기 위해 기억장치 내에 옮겨놓을 공간을 확보하는 기능

· 연결(Linking) : 부 프로그램 호출 시 그 부 프로그램이 할당된 기억장소의 시작 주소를 호출한 부분에 등록하여 연결하는 기능

· 재배치(Relocation) : 디스크 등의 보조기억장치에 저장된 프로그램이 사용하는 각 주소들을 할당된 기억장소의 실제 주소로 배시키는 기능

· 적재(Loading) : 실행 프로그램을 할당된 기억공간에 실제로 옮기는 기능


④ 로더의 종류


Compile And Go 로더

· 별도의 로더 없이 언어 번역 프로그램이 로더의 기능까지 수행하는 방식

· 연결 기능은 수행하지 않고 할당, 재배치, 적재 작업을 모두 언어 번역 프로그램이 담당

절대 로더(Absolute Loader)

· 목적 프로그램을 기억 장소에 적재시키는 기능만 수행하는 로더로, 로더 중 가장 간단한 프로그램으로 구성되어 있음

· 기억 장소 할당이나 연결을 프로그래머가 직접 지정하며 한번 지정한 주기억장소의 위치는 변경이 어려움

직접 연결 로더(Direct Linking Loader)

· 일반적인 기능의 로더로, 로더의 기본 기능 네 가지를 모두 수행하는 로더

· 재배치 로더(Relocation Loader), 상대(Relative Loader)

동적 적재 로더(Dynamic Loading Loader)

· 프로그램을 한꺼번에 적재하는 것이 아니라 실행 시 필요한 부분만 적재하고, 나머지 부분은 보조기억장치에 저장해두는 것으로, 호출 시 적재(Load-On-Call)

· 프로그램의 크기가 주기억장치의 크기보다 큰 경우에 유리한 방법




출처 : 2017 시나공 정보처리기사 필기

'정보처리기사 > 운영체제' 카테고리의 다른 글

6장 운영체제의 실제  (0) 2017.02.12
5장 분산 운영체제  (0) 2017.02.12
4장 정보 관리  (0) 2017.02.12
3장 기억장치 관리  (0) 2017.02.10
2장 프로세스 관리  (0) 2017.02.10

정보처리기사 필기 - 4과목 소프트웨어 공학


5장 S/W 공학의 발전적 추세


142 소프트웨어 재사용


① 재사용의 개요


소프트웨어 재사용(Software Reuse)은 이미 개발되어 인정받은 소프트웨어의 전체 혹은 일부분을 다른 소프트웨어 개발이나 유지에 사용하는 것


· 소프트웨어 개발의 품질과 생산성을 높이기 위한 방법으로, 기존에 개발된 소프트웨어와 경험, 지식 등을 새로운 소프트웨어에 적용

· 클래스, 잭체 등의 소프트웨어 요소는 소프트웨어 재사용성을 크게 향상 시킴

· 소프트웨어 재사요에 가장 많이 이용되는 것은 소스 코드(Source Code)

· 재사용이 가능한 요소 : 전체 프로그램, 부분 코드, 응용 분야에 관한 지식, 논리적인 데이터 모형, 프로세스 구조, 시험 계획, 설계에 관한 결정, 시스템 구조에 관한 지식, 요구 분석 사항, 문서화, 전문적인 기술과 개발 경험, 품질 보증, 응용 분야 지식 등

· 소프트웨어 부품(모듈)의 크기가 작고 일반적인 설계일수록 재사용률이 높다


② 재사용의 이점


· 개발 시간과 비용 단축

· 소프트웨어 품질 향상

· 소프트웨어 개발의 생산성 향상

· 프로젝트 실패의 위험 감소

· 시스템 구축 방법에 대한 지식 공유

· 시스템 명세, 설계, 코드 등 문서를 공유


③ 재사용 도입이 문제점


· 어떤 것을 재사용할 것인지 선정해야함

· 시스템에 공통적으로 사용되는 요소들을 발견해야 함

· 프로그램의 표준화가 부족

· 새로운 개발 방법론을 도입하기 어려움

· 재사용을 위한 관리 및 지원이 부족함

· 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려움

· 프로그램 언어 종속적

· 소프트웨어 요소의 내부뿐만 아니라 인터페이스 요구사항의 이해 필요

· 라이브러리 안에 포함시킬 재사용 요소의 명확한 결정 기준 없음


④ 재사용 방법


 합성 중심

 (Composition-Based)

 전자 칩과 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞추어 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이락도 함

 생성 중심

 (Generation-Based)

 추상화 형태로 쓰여진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함



143 소프트웨어 재공학


① 재공학의 개요


소프트웨어 재공학(Software Reengineering)은 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 ㅜ가하여 소프트웨어 성능을 향상시키는 것


· 유지보수 비용이 소프트웨어 개발 비용의 대부분을 차지하는 문제를 염두에 두어 기존 소프트웨어의 데이터와 기능들의 개조 및 개선을 통해 유지보수성과 품질을 향상시키려는 기술

· 유지보수 생산성 향상을 통해 소프트웨어 위기를 해결하는 방법

· 기존 소프트웨어의 기능을 개조하거나 개선하므로, 예방 유지보수 측면에서 소프트웨어 위기를 해결하는 방법

· 소프트웨어 재공학도 자동화된 도구를 이용하여 소프트웨어를 분석하고 수정하는 과정을 포함

· 스프트웨어에서 발생할 수 있는 오류가 줄어 들고, 비용이 절감 됨


② 재공학의 등장 배경


· 기존 소프트웨어가 노후되어 새로운 소프트웨어로 대치해야할 경우 현재 시스템보다 훨씬 더 좋은 시스템을 만들 수 있다는 보장 없음

· 현재 소프트웨어 품질이 더 좋은 소프트웨어로 교체된다고 해도 사용상의 문제점이 없다고 장담할 수 없음

· 새로운 소프트웨어를 개발해도 기존 시스템과의 호환성이 100% 이루어질 수도 없을 뿐만 아니라, 사용자의 교육에도 많은 영향을 줄 수 있음


③ 재공학의 목표


소프트웨어 재공학은 유지보수성 및 기술 향상, 유지보수의 생산성 향상, 소프트웨어 수명 연장, 소프트웨어 요소들을 추출하여 정보 저장소에 저장하는 것을 주된 목적으로 하며, 다음과 같은 목표를 가지고 있음


· 복잡한 시스템을 다루는 방법 구현 : 시스템이 복잡해질수록 시스템을 다루는 방법이 필요하여 이를 위해 자동화 도구 사용 가능

· 다른 뷰의 생성 : 기존 시스템 개발에 대한 관점 외에 다른 방향의 관점 생성

· 잃어버린 정보의 복구 및 제거 : 시스템이 계속적인 개발을 거치면서 잃어버린 정보를 복구하거나 필요없는 정보 제거

· 부작용의 발견 : 의도되지 않았던 내용이 구현될 경우 이를 발견

· 고수준의 추상 : 추상화된 어려운 내요을 여러 형태로 추출하여 이해에 도움 줌

· 재사용 용이 : 재사용이 가능한 모듈을 추출하여 재사용이 용이하도록 함


④ 소프트웨어 재공학의 주요 활동


 분석(Analysis)

 기존 소프트웨어의 명세서를 확인하여 소프트웨어의 동작을 이해하고, 제공할 대상 선정

 개조(재구조, 재구성)

 · 개조(Restructuring)는 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 표현 형태로 바꾸는 것

 · 기존 소프트웨어의 구조를 향상시키기 위하여 코드를 재구성하는 것으로 소프트웨어의 기능과 외적인 동작은 바뀌지 않음

 역공학(Reverse Engineering)

 기존 소프트웨어를 분석하여 소프트웨어 개발 과정과 데이터 처리 과정을 설명하는 분석 및 설계 정보를 재발견하거나 다시 만들어내는 작업

 · 정공학(일반적인 개발 단계)과는 반대 방향으로 기존 코드를 복구하는 방법

 · 대상 소프트웨어가 있어야 하므로 이로부터 작업 시작됨

 · 기존 소프트웨어의 구성 요소와 그 관계를 파악하여 설계도를 추출하거나, 구현과는 독립적인 추상화 표현 만듦

 · 코드 역공학 : 코드→흐름도→자료 구조도→자료 흐름도 순으로 재생

 · 데이터 역공학 : 코드→자료사전→개체 관계도 순으로 재생

 · 역공학의 가장 간단하고 오래된 형태 : 재문서화(같은 수준의 추상 표현을 새로이 만들거나 다시 제작)

 이식(Migration)

 기존 소프트웨어를 다른 운영체제나 하드웨어 환경에서 사용할 수 있도록 변환하는 작업




144 클라이언트/서버/ S/W 공학


① 클라이언트/서버 시스템의 개요


· 클라이언트/서버 시스템은 분산 시스템의 가장 대표적인 모델로, 정보를 제공하는 서버와 정보를 요구하는 클라이언트로 구성된 방식

· LAN을 통하여 클라이언트(워크스테이션, PC)와 서버가 하나의 작업을 분산, 협동 처리

· 중대형 컴퓨터보다 훨씬 적은 비용으로 지원 가능

· 처리햘 자료가 발생한 그 지역에서 처리 가능

· 고성능 워크스테이션에서 가능한 그래픽 사용자 인터페이스를 쉽게 지원

· 서버는 공유된 다양한 시스템 기능과 자원을 클라이언트에게 제공

· 서비스 기능에 따른 서버의 종류

 파일 서버(File Server)

 클라이언트가 요청한 파일 내의 레코드 제공

 데이터베이스 서버(Database Server)

 클라이언트가 요청한 SQL(질의어) 처리하여 결과 제공

 트랜잭션 서버(Transaction Server)

 클라이언트가 요청한 원격 프로시저 실행 후 결과 제공

 그룹웨어 서버(Groupware Server)

 서버가 클라이언트와 통신할 수 있도록 하는 응용 소프트웨어 집합을 제공 


② 클라이언트/서버 시스템의 소프트웨어 요소


· 애플리케이션(응용 프로그램) 요소 : 응용 프로그램에 의해 정의된 요구사항을 구현하는 것으로, 서버와 클라이언트에 위치 가능

· 데이터베이스 요소 : 응용 프로그램에서 요구하는 데이터 조작과 관리를 수행하는 것으로 서버에 위치

· 프레젠테이션/상호작용 요소 : 그래픽 사용자 인터페이스(GUI)와 관련된 모든 기능을 구현하는 것으로, 클라이언틍에 위치


③ 미들웨어


미들웨어(Middleware)는 클라이언트가 서버 측에 어떠한 처리를 요구하고, 또 서버가 그 처리한 결과를 클라이언트에게 돌려주는 과정을 효율적으로 수행하도록 도와주는 소프트웨어로 클라이언트와 서버 사이에 존재


· 미들웨어가 정상적으로 수행되기 위해서는 클라이언트와 서버에 각각의 미들웨어 있어야 함

· 클라이언트와 서버 간의 데이터 통로 제공, 작업 처리 서비스 검색, 프로그램 보안 및 감시 등의 기능 수행

· 미들웨어의 종류

 통신 미들웨어

 NOS(Network Operating System)

 데이터베이스 미들웨어

 ODBC

 분산 객체 미들웨어

 CORBA, DCOM


※ 객체 요청 브로커 / CORBA

· 객체 요청 브로커(ORB; Object Request Broker)

- 객체 요청 브로커는 분산 객체 미들웨어의 일종으로 기존의 미들웨어보다 기능이 강화되었으며 클라이언트의 객체가 서버 객체의 캡슐화된 메소드에게 메시지를 보낼 수 있게 하는 것

· CORBA(Common Object Request Broker Architecture)

- 가장 많이 사용되는 객체 요청 브로커의 표준이며, OMG(Object Management Group)라는 개발자 연합에서 인기했음

- CORBA가 클라이언트/서버 시스템에서 구현될 때 클라이언트와 서버 간에 정보를 송·수신하는 데 필요한 인터페이스 언어는 IDL(Interface Description Language)



145 CASE


① CASE의 개요


CASE(Computer Aided Software Engineering)는 소프트웨어 개발 과정에서 사용되는 요구 분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것


· 소프트웨어 생명 주기의 전체 단계를 연결해주고 자동화해주는 통합된 도구를 제공해주는 기술

· 소프트웨어 개발 도구와 방법론이 결합된 것으로, 정형화된 구조 및 방법(메커니즘)을 소프트웨어 개발에 적용하여 생산성 향상을 구현하는 공학 기법

· 소프트웨어 개바르이 모든 단계에 걸쳐 일관된 방법론을 제공하는 자동화 도구(CASE Tool)들을 지원하고, 개발자들은 이 도구를 사용하겨 소프트웨어 개발의 표준화를 지향하며, 자동화의 이점을 얻을 수 있게 해줌

· CASE의 주요 기능 : 소프트웨어 생명주기 전 단계의 연결, 다양한 소프트웨어 개발 모형 지원, 그래픽 지원 등


② CASE 사용의 이점


· 소프트웨어 개발 기간을 단축하고 개발 비용 절감 가능

· 자동화된 기법을 통해 소프트웨어 품질 향상

· 소프트웨어의 유지보수를 간편하게 수행 가능

· 소프트웨어의 생산성이 향상되고 생산, 운용 활동을 효과적으로 관리·통제 가능

· 품질과 일관성을 효과적으로 제어 가능

· 소프트웨어 개발의 모든 단계에 걸친 표준 확립 가능

· 소프트웨어 모듈의 재사용성 향상됨

· 소프트웨어의 개발 기법을 실용화할 수 있고, 문서화를 쉽게 작성 가능


③ CASE 분류


CASE는 소프트웨어 생명 주기의 어느 부분을 지원하느냐에 다라 다음과 같이 분류 가능


상위(Upper) CASE

· 소프트웨어 생명 주기의 전반부에서 사용되는 것으로, 문제를 기술하고 계획하며 요구 분석과 설계 단계를 지원하는 CASE

· 여러 가지 명세와 문서를 작성하는 데 사용됨

· 상위 CASE 도구에는 SREM, PSL/PSA, SERA, FOUNDATION


하위(Lower) CASE

· 소프트웨어 생명 주기의 하반부에서 사용되는 것으로 코드의 작성과 테스트, 문서화하는 과정을 지원하는 CASE

· 하위 CASE 도구에는 구문 중심 편집기, 코드 생성기


통합(Integrate) CASE

· 소프트웨어 생명 주기에 포함되는 전체 과정을 지원하기 위한 CASE로, 공통의 정보 저장 장소와 통일된 사용자 인터페이스를 사용하여 도구들을 통합

· 통합 CASE 도구에는 IEF, POWERTOOLS, TAGS/IORL, TEAMWORK


④ 정보 저장소


정보 저장소의 개요

정보 저장소는 소프트웨어를 개발하는 과정 동안에 모아진 정보를 보관하여 관리하는 곳으로 CASE 정보 저장소, CASE 데이터베이스, 요구사항 사전, 저장소

· 초기의 소프트 개발 환경에서는 사람이 정보 저장소 역할을 했지만 오늘날에는 데이터베이스가 정보 저장소 역할 담당

· 도구들의 통합, 소프트웨어 시스템의 표준화, 소프트웨어 시스템 정보의 공유, 소프트웨어 재사용성의 기본이 됨


정보 저장소 사용의 이점

· 도구들과 생명 주기 활동, 사용자들, 응용 소프트웨어들 사이의 통신과 소프트웨어 시스템의 정보 공유 향상

· 소프트웨어 시스템 구성 요소들과 시스템 정보 저장소에 의해 관리되므로 유지 보수성 향상됨

· CASE 도구들 간에 정보를 쉽게 교환하고, 사용자가 쉽게 새로운 도구를 추가 가능하도록 해줌

· CASE 도구들을 통합하여 통합 CASE 도구 사용 가능

· 중복된 공통 정보를 통합하며 불필요한 정보 제거

· 생명 주기 정보를 재사용할 수 있도록 함

· 소프트웨어 시스템의 이식과 변환을 용이하게 함



출처 : 2017 시나공 정보처리기사 필기

+ Recent posts