학사 나부랭이

Operating System - Opening & Systems 본문

Dot-Gabi/Operating System

Operating System - Opening & Systems

태양왕 해킹 (14세) 2021. 4. 2. 01:17

 컴퓨터의 여러 응용 프로그램을 설치해주고 하드웨어 장치를 효율적으로 작동하게 관리하는 자원 관리와 사용자가 컴퓨터를 손쉽게 이용할 수 있도록 해주는 User Interface를 위한 프로그램의 집단이에요.

운영체제는 컴퓨터의 하드웨어를 조정하고 관리하는 소프트웨어라는 점에서 응용 프로그램과 차이를 가져요.

 

 컴퓨터의 기본 요소는 4가지가 있고 각각 하나 이상의 모듈이 존재해요. 이런 구성 요소들은 프로그램 수행을 위해 연결되어 있죠.

CPU

 컴퓨터의 동작을 제어하고 데이터를 처리해요. MIPS(Million of Instructions Per Second, 초당 n00만 개의 명령을 수행)라는 단위로 속도를 측정해요.

메인 메모리

 데이터와 프로그램을 저장해요. 컴퓨터가 종료되면 내용이 사라지는 휘발성이고 CPU와 HDD 간의 속도차 때문에 발생하는 병목현상을  해결하기 위해 사용되어요.

입출력 모듈

 컴퓨터와 HDD, 키보드, 디스플레이, 통신장비 등 외부 환경과의 데이터 이동을 담당해요.

시스템 버스

 CPU, 메인 메모리, 입출력 모듈 간의 통신을 담당해요. CPU는 개별적인 입출력 장치를 처리하는 것이 아니라 시스템 버스(중간 제어기)와 어떻게 대화할지만 생각하면 되죠. 데이터 버스와 주소 버스, 제어 버스가 있으며 각각 데이터, 주소, 제어 신호를 통신시켜요.

 

Simple batch system(단순 일괄 처리 시스템)

 일괄 처리 운영체제는 CPU의 이용률을 향상시키기 위해 개발되었어요. 단순 일괄 처리 기법의 기반이 되는 아이디어는 모니터를 사용하는 것이에요. 전체의 작업 묶음(Batch)을 입력 장치에 넣으면 한 번에 하나씩 프로그램을 실행시켜요. 한 프로그램이 끝나면 제어가 모니터로 넘어가서 그 모니터가 자동으로 다음 프로그램을 적재할 수 있죠. 이로 인해 사용자가 작업 처리 단계별로 컴퓨터에게 직접 명령을 내릴 필요가 없어졌어요.

각 작업 안에는 기본 형태의 JCL(Job Control Language, 작업 제어 언어) 명령어들이 포함되어 있어요. 이는 특수한 형태의 프로그래밍 언어로, 모니터에 대한 명령어를 전달할 때 사용되어요.

 

Multi-programmed batch system(멀티프로그래밍 일괄 처리 시스템)

 단순 일괄 처리 운영체제를 통해 작업 처리 순서가 자동으로 결정되는 경우에도 입출력 장치의 속도가 CPU에 비해 느려서 CPU가 쉴 수 있어요. 이때 메인 메모리에 여러 프로그램을 적재하면 CPU는 프로그램이 입출력 대기에 들어간 사이에 다른 프로그램을 돌아가며 실행할 수 있어요. 이런 개념을 멀티프로그래밍 또는 멀티 태스킹이라고 해요.

 

Time sharing system(시분할 시스템)

 CPU가 수행시켜줄 수 있는 시간을 작업 수에 맞춰 분할하고 각자 일정 시간씩 분배받아 번갈아가며 처리하면 실제로는 작업이 하나씩, 조금씩 처리되고 있음에도 여러 작업을 동시에 수행하는 듯한 효과를 볼 수 있는데 이것이 시분할 시스템이에요. 이 기법을 적용하려면 위의 멀티프로그래밍 시스템이 필요하죠. 사용자에게 즉시 응답해줄 수 있는 장점이 있고 이 응답을 즉시 보기 위해서는 디스플레이가 필요하고 다음 일을 의뢰하기 위해서는 키보드나 마우스 같은 입력 장치가 필요해요. 이렇게 사용자가 디스플레이와 입력 장치를 통해 대화하듯이 일을 처리하는 것을 대화식 시스템이라 해요.

 

멀티프로그래밍 시스템에서 애로사항

 작업을 동시에 여러 개 진행시키고 또 각 작업은 수많은 처리 단계로 구성되어 있어서 모든 경우를 분석하는 것은 사실상 불가능해요. 그러다 보니 특정 프로그램 처리 순서에서만 발견되는 미묘한 프로그래밍 에러가 발견되면 응용 프로그램 에러와 하드웨어 에러를 구분해야 하고 에러가 발생한 정확한 조건을 재현하기도 어려우며 혹여나 에러를 발견해도 원인을 특정하기 어렵겠죠. 이런 에러가 발생하는 원인은 다음과 같아요.

동기화의 문제

 가끔 한 루틴이 시스템의 다른 곳에서 발생할 사건을 기다려서 수행을 보류해야 하는 경우가 있어요. 이때 사건이 완료되었음을 알리는 신호의 전달 기법을 잘못 설계해서 신호가 분실되거나 중복 전달될 수 도 있어요.

상호 배제를 지키지 않음

 두 명의 사용자가 동시에 같은 파일을 수정하려고 하는 등 다수의 사용자/프로그램이 동시에 공유 자원을 사용하려고 하는 경우가 있어요. 만약 이 동시 접근이 제어되지 않은 채 이루어지면 에러가 발생하죠.

교착 상태에 빠짐

 두 개 이상의 프로그램이 서로 상대 프로그램이 할당받은 자원을 요청하며 대기하는 상태예요. 이런 교착 상태는 자원이 어떤 순서로 할당되고 회수되느냐에 따라 발생 여부가 달라져요.

비결정적인 프로그램 연산

 프로그램의 결과는 그 프로그램 내의 행위에 의해서만 결정되어야 하며 공유 시스템 안의 다른 프로그램에 의해 결과가 달라져서는 안 돼요. 그러나 메모리를 공유하는 프로그램을 CPU가 인터리빙 방식(메모리 접근 시간을 최소화하기 위해 여러 모듈로 나눈 메모리에 동시 접근하는 기법)으로 실행하면 동일한 공유 메모리 영역에 예측 불가능한 방식으로 덮어써서 프로그램 수행에 방해될 수 있어요.

 

Multi-processor system

 기술이 발전하고 하드웨어의 가격이 하락하면서 성능과 신뢰성을 높이기 위해서 여러 CPU를 연결하여 멀티 프로세서 시스템이 개발되었어요.

Loosely coupled system(약 결합 시스템)

 각 CPU마다 독립된 메모리를 가진 시스템으로 분산 처리 시스템이라고도 해요. 둘 이상의 독립된 컴퓨터가 통신선을 통해 연결된 시스템이에요. 각 시스템마다 독자적인 운영체제를 가지고 있고 독립적으로 작동할 수도, 상호 통신을 할 수도 있으며 통신선으로 다른 시스템의 파일을 참조할 수도 있고 파일의 전송이나 부하가 적은 CPU로 작업을 보낼 수 있어요. 여기서 CPU 간의 통신은 메시지 전달이나 원격 프로시저 호출(Remote Procedure Call)을 통해 이루어지죠.

Tightly coupled system(밀(密) 결합 시스템)

 여러 CPU가 동일 운영체제 아래서 하나의 메모리르 공유하는 시스템이에요. 하나의 운영체제가 모든 CPU와 하드웨어를 제어하는데 이때 CPU 간의 통신은 공유 메모리를 통해 이루어지죠. 그러나 이로 인해 공유 자원에 대한 경쟁이 발생할 수 있죠.

 

Parallel processor system(병렬 처리 시스템)

 이러한 멀티 프로세서 시스템을 효율적으로 운영하기 위해 여러 운영체제 구조가 나타났는데 데이터 스트림과 명령어 스트림을 기준으로 병렬 구성의 정도에 따라 구분하면 병렬 처리 시스템은 4가지 형태로 나뉘어요.

SISD(Single Instruction stream, Single Data stream)

 병렬 처리가 없는 싱글 프로세서 시스템이에요.

SIMD(Single Instruction stream, Multiple Data stream)

 배열 프로세서라고 여러 CPU가 동일한 명령을 서로 다른 데이터에 대해 처리할 수 있어요.

MISD(Multiple Instruction stream, Single Data stream)

 현실적으로 구현하지 못해요.

MIMD(Multiple Instruction stream, Multiple Data stream)

 여러 CPU가 서로 다른 명령어를 서로 다른 데이터에 대해 처리할 수 있어요.

 

 그럼 이러한 멀티 프로세서 시스템 안에서 CPU가 동작하는 방식을 알아볼까요?

파이프라인 구조

 여러 프로그램이 동시에 서로 다른 실행단계에 있도록 함으로 성능 향상을 꾀해요. 예를 들자면 첫 번째 CPU가 반입을 처리하고 해독 파트로 넘어가면 그 프로그램을 두 번째 CPU에게 넘기고 다음 프로그램의 반입을 처리하는 방식이죠. 아래는 4개의 CPU를 동원할 경우의 동작 방식의 예시예요.

배열 프로세서 구조

 처리할 모든 원소에 대해 동일한 명령을 동시에 수행하는 구조예요. 위의 SIMD 구조에서 사용되죠.

Systolic 배열 구조와 Super-scalar 구조

 배열 프로세서 구조와 유사하지만 CPU 중 맨 처음과 마지막 CPU만 메모리에 접근할 수 있도록 제한해서 메모리에 대한 경쟁을 해소했어요. Super-scalar는 파이프라인 구조를 여러 개 사용하여 한 cycle에 하나 이상의 명령이 동시에 실행되는 구조예요.

Dataflow 구조

 CPU는 PC가 가리키는 제어 흐름에 기반해 순차적으로 처리하지만 데이터 플로우 구조에서는 명령의 실행에 필요한 피연산자 이용 가능해질 때 실행하는 방식이에요. 여러 연산을 병렬로 수행할 수 있지만 완전히 상업적으로 구현되지는 않았어요.

 이제 병렬 처리 시스템의 종류에 대해 알아보죠.

Master-Slave

 하나의 Master CPU와 여러 slaves CPU로 이루어져 있어요. 마스터는 입출력과 계산을, 슬레이브들은 계산 위주의 작업을 맡고 마스터가 운영체제를 실행하는 권한을 가지고 있고 슬레이브들은 사용자 프로그램만 실행할 수 있어요. 슬레이브의 실행 도중 필요한 운영체제 서비스는 마스터에게 인터럽트를 보내서 해결하여 시스템의 비대칭성이 있어요. 이런 점에서 마스터에서 문제가 생기면 전체 시스템이 다운되죠.

Symmetric Multi-Processing

 마스터-슬레이브의 단점을 보완하는 구조로 복잡하지만 가장 강력해요.

시스템의 모든 CPU가 동등하게 운영체제를 실행할 수 있는 권한을 가져 대칭적이고 시스템의 전반적인 정보를 통일적이고 일관성 있게 관리해요. 이 권한은 CPU 사이에서 그때그때 옮겨 다녀요. 운영체제를 실행하고 있는 CPU를 관리자 CPU라고 하고 각종 시스템 콜에 대한 서비스와 자원에 대한 관리 의무가 있죠.

각 CPU 간의 통신은 공유 메모리를 통해 이루어지며 이러한 점에서 공유 자원을 사용하려고 할 때 대립 문제가 발생할 수 있어요.

이 구조는 CPU가 고장 나도 결함 허용성이 있어서 신뢰성이 높으며 자원의 활용도도 높고 한 프로그램의 실행에 여러 CPU가 협력하는 병렬 프로세서 시스템을 구축할 수 있어요.

독립 운영체제 구조

 CPU들은 각자의 운영체제를 가지며 발생하는 인터럽트도 해당 CPU가 해결하므로 구조적으로 약 결합 시스템이에요. 특정 CPU에 배정된 프로그램은 완료 때까지 그 CPU에서 실행되며 전체 시스템에서 사용되는 데이터 구조는 상호 배제를 지키도록 신중하게 설계되어야 하죠. 이 구조는 한 CPU의 고장이 전체 시스템의 고장으로는 이어지지 않으며 운영체제의 데이터는 각 운영체제에 분산되어 있어서 접근 경쟁은 약한 대신 각 프로그램의 실행을 CPU끼리 도와주지 않아서 처리해야 할 일이 쌓인 CPU와 쉬고 있는 CPU가 공존할 수도 있어요.

분산 처리

 다수의 분산된 컴퓨터 시스템에서 수행되는 다수의 프로세스를 관리해요. 클러스터 시스템이 대표적이에요.

 

 

Comments