전자전기공학/운영체제

[Operating System/운영체제][운영체제와 하드웨어]

Sim 2024. 9. 15. 19:24
반응형

· 목차

  - 확장된 기계로서의 운영체제

  - 자원 관리자로서의 운영체제

  - 프로세서 또는 CPU

  - 메모리


 

 

 

 

이번에는 운영체제의 역할에 대해서 조금 살펴본 이후에 운영체제와 관련된 하드웨어를 살펴보며

각 하드웨어가 무엇을 하는지에 대해서 간략하게 살펴보겠습니다.

 

 


 

 

 

확장된 기계로서의 운영체제 - 추상화

 

 

운영체제에서 추상화는 복잡한 하드웨어나 소프트웨어의 세부 구현을 숨기고, 사용자나 다른 프로그램이 더 간단하고

이해하기 쉬운 방식으로 시스템을 사용할 수 있도록 만드는 개념입니다.

 

운영체제에서 추상화의 목적은 무엇일까요?

 

추상화를 하는 이유는 시스템의 복잡성을 줄이고, 일관된 인터페이스를 제공하는 것을 목표로 합니다.

사용자나 애플리케이션 프로그램이 직접 하드웨어 자원에 접근 하는 대신, 운영체제가 제공하는 인터페이스를 통해

쉽게 자원에 접근할 수 있도록 하는 것 입니다.

 

이해를 더 돕기 위해서 아래와 같은 예시를 설명드리도록 하겠습니다.

 

 

요즘에는 플로피 디스크라는 것을 사용하지 않지만, 플로피 디스크가 직관적으로 이해가 쉽기 때문에 플로피 디스크로 예를 들겠습니다.

 

플로피 디스크의 경우 16개의 명령들을 사용한다고 예를 들자면, 장치 레지스터에 1~9개의 바이트를 적재하여 각 명령을 지정하게 됩니다.

이 명령들은 각각 데이터를 읽고, 쓰고, 디스크 암을 움직이고, 트랙을 포맷하는 기능 등을 제공하게 됩니다.

 

또한 인자들은 읽어야 할 디스크 블록의 주소, 트랙당 섹터 개수, 물리적 매체에서 사용되는 저장 모드, 섹터간 간격,

deleted-data-address-mark 표시로 할 일 등을 지정해줍니다.

 

이렇게 복잡한 과정을 프로그래머가 세부하게 지정해주기 어렵기 때문에 추상화 개념이 필요한 것입니다.

쉽게 설명해서 플로피 디스크를 작동 시키는 모터가 작동중인지 혹은 아닌지를 항상 인식하고 있어야 합니다.

모터가 꺼져있다면 데이터를 읽거나 쓰기 위해서 모터를 작동시켜야 합니다.

 

여기서 의문이 들 수 있는데, 그렇다면 적절하게 모터를 작동시키는게 아니라 항상 작동시켜 놓으면 안되는지에 대한 의문이 듭니다.

 

과연 그렇게 간단한 문제라면 운영체제라는 것이 필요할까요?

모터를 계속 작동시켜놓는다면 플로피 디스크가 마모되어 고장날 수 있기 때문에 오래 켜 놓을 수 없습니다.

 

이렇게 작업을 하면서 이런 세부사항까지 신경쓰기 복잡하다는 생각이 들 것 입니다.

 

그렇기 때문에 운영체제는 컴퓨터 시스템의 여러 자원을 관리하는데, 추상화를 통해 이러한 자원을 쉽게 사용할 수 있도록 도와줍니다.

 

지금까지 살펴본 것 보다 더 이해하기 쉬운 설명이 있을까요?

 

'파일 시스템의 추상화'라는 예로 설명을 드리자면, 여러분들은 컴퓨터를 사용할 때 쉽게 폴더를 만들고 그 안에서 파일을 저장하고 수정하며

파일들을 쉽게 관리할 수 있습니다. 위의 예시를 보면 알 수 있듯이, 원래라면 디스크의 물리적 구조를 알고있어야 했지만

운영체제 덕분에 우리가 디스크의 물리적 구조를 알 필요 없이 파일들을 관리하고 있다는 것을 알 수 있겠죠?

 

 

그렇다면 운영체제의 또 다른 역할은 무엇이 있을까요?

 

 

 

자원 관리자로서의 운영체제

 

 

 

운영체제는 자원관리자로서 컴퓨터 시스템의 다양한 하드웨어 및 소프트웨어 자원을 관리하고

효율적으로 사용할 수 있도록 하는 역할을 합니다.

 

컴퓨터 시스템에서 자원은 CPU, 메모리, 저장 장치, 입출력 장치 등으로 구성되며 해당 자원을

효율적으로 할당하고 조정하여 프로그램이 충돌없이 작동하도록 지원합니다.

 

예를 들자면, 현대의 운영체제들은 여러 개의 프로그램들이 동시에 실행할 수 있도록 합니다.

만약에 컴퓨터에서 실행되고 있는 세 개의 프로그램이 동시에 같은 프린터에 출력을 하고자 한다면,

세 개의 프로그램에서 출력하고자 하는 것이 섞여서 나오며 말 그대로 난리가 날 것 입니다.

해당 상황에서 운영체제는 프린터로 나가는 출력물을 디스크에 버퍼링해 둠으로써 잠재적 난리를 해결할 수 있습니다.

 

위에서 설명한 것 처럼 운영체제는 각 동시에 작동하는 프로그램의 충돌 등을 관리하며 프로그램이 안전하게 작동할 수 있도록

자원 관리자로서의 역할을 하는 것 입니다.

 

또한 자원 관리는 자원을 두 가지 면으로 멀티플랙싱하는 것을 포함합니다.

멀티플랙싱에는 시간측면과 공간측면의 멀티플랙싱이 있습니다.

 

시간측면에서의 멀티플랙싱을 하면 여러 프로그램 또는 사용자가 자원을 돌아가면서 사용하게 됩니다.

첫 사용자가 자원을 사용하고 이어서 자원을 사용하게 됩니다.

예를 들어서, CPU가 하나 뿐이고 여러 프로그램들이 실행하길 원한다면 한 프로그램에 CPU를 할당하고

실행이 완료된다면, 다음 프로그램이 CPU를 점유하게 되는 것 입니다.

 

즉, '다음번에 누가 얼마 동안 CPU를 점유하느냐'를 관리하는 것 입니다.

 

공간 측면에서의 멀티플랙싱을 살펴보자면, 순서에 따라서 자원을 할당하는 것이 아니라

자원을 나눠갖고 여러 프로그램들이 동시에 메모리에 상주하게 되는 것 입니다.

 

이제 앞에서 살펴봤던 것과 같이 운영체제는 컴퓨터 하드웨어와 깊은 연관성을 가지고 있다는 것을 아실 수 있습니다.

컴퓨터의 명령집합(instruction set)을 늘려주고 그의 자원을 관리하는 것 입니다.

 

하드웨어와 운영체제의 연관성에 대해서 보기 위해서 우선 프로세서, 메모리에 대해서 간단히 살펴보고,

다음 시간에 디스크, 테이프, I/O장치, 버스, 다중스레드와 멀티코어 칩에 대해서 간략하게 살펴보겠습니다.

 

 

 

프로세서 또는 CPU

 

 

 

컴퓨터의 '뇌'는 CPU라는 것을 모두 알고있는 사실일 것이라고 생각합니다. 또한 CPU는 메모리에서 명령을 반입하여 실행합니다.

프로그램이 실행되면, 명령어를 반입, 해석, 실행의 순서로 진행되며, 해당 순서를 반복하는 것으로 프로그램들이 실행되는 것 입니다.

 

CPU는 명령이나 데이터를 가져오기 위해 메모리를 접근하는 시간이 명령을 실행하는 시간보다 훨씬 길기 대문에 모든 CPU에는

중요한 변수들과 임시 결과들을 보관할 수 있는 레지스터들을 어느 정도 갖고 있습니다. 그렇기 때문에 일반적으로 명령 집합에는

메모리에 있는 워드를 레지스터에 저장시키는 명령과 거꾸로 레지스터에 있는 워드를 메모리에 저장하는 명령이 존재합니다.

 

또한 변수와 임시 결과를 저장해 두기 위해 있는 일반 레지스터와 별도로 대부분의 컴퓨터들은 프로그래머가 볼 수 있도록 되어있는

특별한 레지스터들도 갖고 있습니다. 이들 중 하나는 페치(fetch)해야 하는 다음 명령의 메모리 주소를 포함하는 프로그램 카운터 이며,

그 명령이 페치되고 나면 프로그램 카운터는 다음 명령을 가르키도록 조정됩니다.

 

이처럼 특별한 레지스터들이 있는데, 이외에도 여러가지 레지스터가 존재합니다. 현재 여기에 모두 정리하기에는 너무 많은 양이기 때문에

다음에 따로 레지스터에 대해서만 구체적으로 알아보고 포스팅하도록 하겠습니다.

레지스터의 종류는 아래와 같습니다.

 

1. 특수 목적 레지스터(Special Purpose Register)

   a. 프로그램 카운터(Program Counter, PC)

   b. 명령어 레지스터(Instruction Register, IR)

   c.  스택 포인터(Stack Pointer, SP)

   d. 베이스 포인터(Base Pointer, BP)

   e. 플래그 레지스터(Flag Register) 또는 상태 레지스터(Status Register)

2. 주소 레지스터(Address Registers)

   a. 데이터 레지스터(Data Register)

   b. 메모리 버퍼 레지스터(Memory Buffer Register, MAR)

3. 데이터 레지스터(Data Register)

4. 인덱스 레지스터(Index Register)

5. 누산기(Accumulator)

 

 

 

메모리

 

 

 

 

 

 

이상적인 메모리는 빠르고, 크고, 저렴해야 하지만 해당 목표를 만족시키는 기술은 아직 존재하지 않기 때문에

위의 그림과 같이 메모리 시스템을 여러 계층으로 구축하게 됩니다.

 

맨 위 계층인 Register는 CPU 내부에 있는 레지스터입니다. 만드는 방법 또한 CPU와 같은 방법으로 만들어져 속도 역시

CPU만큼 빠릅니다. 프로그램들이 소프트웨어로 이들 레지스터들을 관리해야하며, 무엇을 담을지 결정해야 합니다.

 

Cache계층은 하드웨어가 주로 관리하는 캐시 메모리가 존재합니다. 메인 메모리는 보통 64바이트 크기의

캐시라인(Cache line)으로 나누어집니다.

 

즉, 캐시 라인은 주소 0에서 63은 보통 캐시라인, 64에서 127까지는 캐시라인 1과 같이 나누어집니다.

가장 많이 사용되는 캐시 라인은 CPU 안이나 아주 가까이에 위치한 고속 캐시에 넣어 둡니다.

프로그램이 메모리 워드를 읽으려 할 때 캐시 하드웨어는 우선 원하는 라인이 캐시에 있는지를 확인하며,

캐시에 있는 경우를 캐시 히트(Cache hit)라고 부르고 이럴 경우 읽으려는 요청은 캐시에서

처리해주어 버스를 거치는 메모리로의 요청은 하지 않게 됩니다.

 

또한 캐싱이라는 개념이 있는데, 캐싱은 메인 메모리에서 라인들을 CPU 캐시에 유지하는 것 뿐만 아니라 컴퓨터 과학의

다른 영역에서도 중요한 역할을 합니다. 작은 조각으로 나눌 수 있는 큰 자원이 있고, 이들 중에 다른 것에 비해 많이 활용되는 것이 있다면,

늘 캐싱을 통해서 성능을 향상시킬 수 있습니다.

 

 

 

지금까지 운영체제의 추상화와 자원 관리자로서의 운영체제 그리고 프로세서, 메모리에 대해서 간략하게 살펴봤습니다.

 

솔직히 프로세서와 메모리는 훨씬 더 깊은 내용들이 많지만, 벌써부터 너무 깊은 이야기를 한다면 이해가 가지 않기 때문에

컴퓨터 구조와 관련된 내용 혹은 다른 것과 관련된 내용으로 포스팅해서 공유하도록 하겠습니다.

 

 

지금까지 글을 읽어주셔서 감사합니다.

 

 

 

 

 

 

 

 

 

반응형