컴퓨터 구조의 문제점    

 

 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변 장치 간 작업 속도가 다르다는 것이다. 메모리와 주변 장치는 시스템 버스(FSB)로 연결되어 있고, CPU(ALU, 제어 장치, 레지스터)는 CPU 내부 버스(BSB)로 연결되어 있다. 문제는 CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 메모리를 비롯한 주변 장치의 속도가 CPU의 속도를 따라가지 못한다. CPU에 비하면 메모리가 느리고 프로그램과 데이터를 보관하는 하드디스크는 메모리보다 느리다. 

 

 이런 문제로 장치간 속도를 개선하고 시스템 작업 속도를 올리기 위해 기술이 개발되었는데 버퍼, 캐시가 이에 해당된다.  

 


    버퍼(Buffer)    

 

 버퍼(Buffer)는 속도 차이가 있는 두 장치 사이에서 그 차이를 완화해준다. 예를 들어, 사과 50개를 마트에 옮긴다고 가정해보자. 한 번에 하나씩 옮기면 50번을 왕복해야 하지만 사과 50개를 트럭에 실어 옮기면 한 번에 옮길 수 있다. 이 때, 버퍼는 트럭에 비유된다. 

 

 입출력에서 데이터를 가져오는 경우에도 마찬가지이다. 느린 입출력 장치에서 데이터를 읽을 때마다 하나씩 전송하면 작업량에 비해 실제로 전송되는 데이터 양이 매우 작다. 따라서, 일정량의 데이터를 모아 전송하면 적은 노력으로도 많은 양의 데이터를 옮겨 속도의 차이를 완화할 수 있다.

 

 또한, 버퍼는 소프트웨어적으로도 사용되는데 대표적인 예는 동영상 스트리밍이다. 동영상은 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이가 발생한다. 플레이어가 재생되는 도중에 데이터가 도착하지 않으면 동영상이 끊기는데,  동영상 데이터 일정부분을 버퍼에 넣으면 이러한 현상을 방지해준다.

 


    스풀(Spool)    

 

 스풀(Spool)은 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다. 대표적으로는 프린터에 사용되는 스풀러(Spooler)이다. 스풀러는 인쇄할 내용을 순차적으로 출력하는 소프트웨어로 출력 명령을 내린 프로그램과 독립적으로 동작한다. 

 

 예를 들어, 워드프로세서로 작업을 하고 프린터로 출력할 때, 프린터 출력 작업과 문서 작업을 동시에 할 수 있는데 이는 스풀러를 사용했기 때문이다. 스풀러가 없다면 프린트 출력 작업과 문서 작업이 독립적으로 진행되지 못하기에 출력 작업이 끝날 때까지 문서작업을 할 수 없다. 

 

 또한, 스풀은 버퍼와 차이점이 있다. 버퍼는 어떤 프로그램이 사용하는 데이터든 버퍼가 차면 이동한다. 즉, 프로그램들 사이에 버퍼를 공유한다. 하지만, 스풀은 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없다. 즉, 프로그램간에 배타적이다. 

 


 

    캐시(Cache)    

 

 캐시(Cache)메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소이다. 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것이라고 예상되는 데이터를 미리 가져다 놓는다. 이 때, 미리 가져오는 작업을 미리 가져오기(prefetch)라고 한다. 예를 들면, 장독대에 있는 간장을 미리 간장통에 가져다 놓는 것을 들 수 있다.

 

 캐시는 CPU 안에 있으며 CPU 내부 버스의 속도로 작동하기 때문에 느린 시스템 버스의 속도로 동작하는 메모리의 단점을 보완해준다. 

 

 캐시는 메모리 내용 중 일부를 미리 가져오고, CPU는 메모리에 접근해야 할 캐시를 먼저 방문해 원하는 데이터를 찾아본다. 만약 캐시에 데이터가 존재하면 캐시 히트(Cache hit)라고 하며 그 데이터를 사용한다. 하지만, 원하는 데이터가 없으면 메모리로 가서 데이터를 찾는데 이를 캐시 미스(Cache Miss)라고 한다. 캐시가 히트되는 적중률을 캐시 적중률(Cache hit ratio)라고 한다. 

 

 

 

 컴퓨터의 성능을 향상하려면 캐시 적중률이 높아야 한다. 캐시 적중률을 높이는 방법 중 하나는 캐시의 크기를 늘리는 것이다. 또한, 앞으로 많이 사용될 데이터를 가져오는 것이다. 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 더 높다는 지역성(Locality) 이론이 있다.  

 

 캐시를 가져오는 것 뿐만 아니라 캐시에 있는 데이터가 변경되는 경우 이를 반영해야 하는 문제도 있다. 캐시는 메모리에 있는데이터를 임시로 가져온 것이기 때문에 캐리에 있는 데이터가 변경되면 메모리에 있는 원래 데이터를 변경해야 한다. 변경하는 방법에는 즉시 쓰기와 지연 쓰기 방식이 있다. 

 

  •  즉시 쓰기(Write through): 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식, 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려진다는 단점이 있지만, 급작스러운 정전에도 데이터를 잃지 않는다는 장점이 있다. 
  • 지연 쓰기(Write back): 변경된 내용을 주기적으로 반영하는 방식, 메모리와의 전송 횟수가 줄어 시스템의 성능을 향상할 수 있으나 메모리와 캐시된 데이터 사이의 불일치가 발생할 수 있다. 

 

 


 

    저장장치의 계층 구조    

 

 가격과 컴퓨터 성능 사이의 타협점으로 저장장치의 계층 구조(Storage hierarchy)가 존재한다. 저장장치의 계층 구조는 속도가 빠르고 값이 비싼 저장장치를 CPU 쪽에 두고, 값이 싸고 용량이 큰 저장 장치를 반대쪽에 배치하여 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻는 방법이다. 

 

 CPU와 가까운 쪽에 레지스터나 캐시를 배치하여 CPU가 작업을 빨리 진행할 수 있게한다. 비교적 속도가 느린 메모리에서 작업한 내용을 하드디스크와 같이 저렴하고 용량이 큰 저장장치에 영구적으로 저장한다. 이처럼 저장장치 계층 구조는 사용자가 저렴한 가격으로 용량은 하드디스크처럼 사용하고 작업 속도는 레지스터처럼 빠르도록 만들어 준다. 

 

 

 

 하지만 저장장치의 계층 구조는 중복되는 데이터의 일관성을 유지하는 것이 문제가 될 수 있다. 변경된 내용을 즉시 반영하지 않고 일정 기간 모았다가 한 꺼번에 메모리에 반영하는 지연 쓰기의 경우나 협업 중인 다른 작업에서 데이터를 읽으려 하거나 갑자기 전원이 꺼지는 경우가 해당한다. 

 


 

    인터럽트    

 

 컴퓨터에는 많은 주변장치가 있기 때문에 CPU가 모든 입출력에 관여하면 작업 효율이 현저하게 떨어진다. 이러한 문제를 해결하기 위해 등장한 것이 인터럽트(Interrupt) 방식이다. 인터럽트는 요리사 옆에 주방 보조를 두는 것과 같다. CPU 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다. 즉, 데이터의 입출력이 이루어지는 동안 CPU는 다른 작업을 할 수 있다. 이 때, 입출력 관리자 또는 장치 관리자가 주방 보조에 해당한다. 

 

 [인터럽트 동작 방식]

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
  3. 데이터 전송이 완료되면 입출력 관리자는 완료 신호를 CPU로 보낸다. 

 이 때, 입출력 관리자가 CPU에게 보내는 완료 신호를 인터럽트라고 한다. CPU는 다른 작업을 하다가 완료 신호를 받으면 하던 작업을 중지하고 옮겨진 데이터를 처리한다. 인터럽트 방식에서는 많은 주변 장치중 어떤 것의 작업이 끝났는지를 CPU에 알려주기 위해 인터럽트 번호를 사용한다. 인터럽트 번호는 완료 신호를 보낼 때 장치의 이름 대신 사용하는 장치의 고유 번호로서 운영체제마다 다르다. 윈도우의 경우 인터럽트 번호를 IRQ(Interrupt ReQuest)라고 부른다. 

 

 CPU는 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킬 수 있다. 이 경우 여러 작업이 동시에 완료되고 그 때마다 인터럽트를 여러 번 사용해야 하는데 이는 비호율적이다. 그래서 여러 개의 인터럽트를 하나의 배열로 만든 인터럽트 벡터(Interrupt Vector)를 사용한다.

 

 인터럽트 동작 방식은 다음과 같다. 입출력 요청 - 데이터 전송 - 인터럽트 발생 순으로 진행되는데 인터럽트 0번과 2번의 작업이 완료되어 인터럽트 0번과 2번이 동시에 발생했다는 것을 알 수 있다. CPU가 인터럽트 벡터를 받으면 0번과 2번의 작업을 동시에 처리한다.

 

 

 입출력 작업을 알리는 인터럽트 외에도 다양한 종류의 인터럽트가 있는데 사용자가 컴퓨터의 전원 버튼을 눌러 강제 종료하면 CPU는 하던 일을 모두 멈추고 처리 중인 데이터를 안전하게 보관한 뒤 시스템을 종료해야 한다. 또한, 메모리에서 실행중인 어떤 작업이 자신에게 주어진 메모리 영역을 넘어서 작업을 하려 하거나 0으로 숫자를 나누면 인터럽트가 발생한다. 

 

 

 [참고]

  • 직접 메모리 접근(Direct Memory Access, DMA): 메모리는 접근 권한을 가진 CPU만 접근이 가능하고 입출력 관리자는 접근이 불가능하다. 따라서, 입출력 관리자에게는 CPU의 허락없이 직접 메모리에 접근할 수 있는 권한을 부여한다. 
  • 메모리 매핑 입출력(Memory Mapped I/O): 직접 메모리 접근을 사용하면 메모리가 복잡해진다. CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터가 섞여 있다. 이를 위해 CPU가 사용하는 메모리 공간직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리한다. 
  • 사이클 훔치기(Cycle stealing): 만약 CPU와 입출력 관리자가 동시에 메모리에 접근하려고 하면 누군가는 양보를 해야한다. 이는 보통 CPU가 메모리 사용 권한을 양보하는데 이는 CPU의 작업 속도보다 입출력장치의 속도가 더 느르기 때문이다. 이러한 상황을 사이클 훔치기라고 한다. 

'운영체제 > 기초' 카테고리의 다른 글

9. 프로세스  (0) 2020.10.16
8. 병렬처리  (0) 2020.10.16
6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05

    버스의 종류    

 

 버스는 CPU와 메모리, 주변장치 간 데이터를 주고받을 때 사용한다. 버스의 종류에는 제어 버스, 주소 버스, 데이터 버스가 있다.

 

  • 제어 버스(Control Bus): 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다. 예를 들어, 메모리에서 데이터를 가져올 때는 읽기 신호를 보내고, 처리한 데이터를 메모리로 옮겨놓을 때는 쓰기 신호를 보낸다. 즉, 제어 버스의 신호는 CPU, 메모리, 주변 장치와 양방향으로 오고 간다.
  • 주소 버스(Address Bus): 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보가 오고 간다. 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다. 따라서, CPU에서 메모리나 주변 장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다. 
  • 데이터 버스(Data Bus): 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다. 

 

 

 

 버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말하는데 CPU가 한 번에 처리할 수 있는 데이터의 크기와 같다. 흔히 32bit CPU, 64bit CPU라고 하는데, CPU가 한 번에 처리할 수 있는 데이터의 최대 크기를 말한다. 32bit의 경우 버스의 대역폭도 32bit이고 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기도 32bit이다. 

 

 참고로 CPU가 한 번에 처리할 수 있는 데이터 최대 크기를 워드(word)라고 한다. 이는 버스의 대역폭과 메모리에 한 번에 저장되는 단위도 워드라는 것을 알 수 있다. 32bit CPU에서 1워드는 32bit이다. 


    메모리의 종류    

 

 모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 프로그램과 데이터가 존재하며 CPU와 협업하며 작업이 이루어진다. 메모리를 이루는 소자 하나의 크기는 1bit이고 0또는 1이 저장된다. 그러나 소자 하나만으로는 데이터를 표현할 수 없어 메모리 주소는 바이트 단위로 지정되고, 메모리에서 데이터를 읽거나 쓸 때에는 워드 단위로 움직인다. 

 

 메모리는 크게 두 종류로 읽고 쓸 수 있는 램(RAM, Random Access Memory)와 읽기만 가능한 롬(ROM, Random Only Memory)로 구분된다. 

 

 

 

 램은 또한 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 ㅂ관할 수 있는 비휘발성 메모리로 나뉜다. 

 

  • 휘발성 메모리(Volatility Memory)에는 동적 램(Dynamic RAM)과 정적 램(Static RAM)이 있다. 동적 램은 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지기에 다시 재생해야 한다. 정적 램은 전력이 공급되는 동안에만 데이터를 보관할 수 있다. 속도는 빠르지만 가격이 비싸다. 일반적으로 메인 메모리는 동적 램을, 캐시 같은 고속 메모리에는 정적 램을 사용한다. 

 

  • 비휘발성 메모리(Non-Volatility Memory)에는 플래시 메모리(Flash Memory)와 FRAM, PRAM 등이 있다. 플래시 메모리는 디지털 카메라, MP3 플레이어, USB 드라이버 같이 전력이 없어도 데이터를 보관하는 저장장치로 사용한다. 하지만, 플래시 메모리의 각 소자는 최대 사용 횟수가 제한되어 많이 사용하면 기능을 잃는다. 따라서, SD 카드나 USB 드라이버를 오래 사용하면 성능이 저하되거나 데이터를 잃어 버릴 수 있다. 또한, 하드디스크를 대신하도록 만든 SSD는 가격이 비싸지만 데이터 접근 속도, 내구성 때문에 컴퓨터, 노트북, 스마트폰 등에 많이 사용한다.

 

 롬은 전력이 끊겨도 데이터를 보관하는 것이 가능하지만 데이터를 한 번 저장하면 바꿀 수 없다는 단점이 있다. 예를 들어 빈 CD는 CD-ROM이라고도 하며 데이터를 한 번만 저장할 수 있다. 롬의 종류에는 마스크 롬, PROM, EPROM 등이 있다. 

 


 

    메모리 보호    

 

  현대의 운영체제는 시분할 기법을 사용하여 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어져 있다. 이러한 상황에서 메모리 보호는 매우 중요한 문제이다. 만약 메모리가 보호되지 않으면 어떤 작업이 다른 작업의 영역을 침범하여 프로그램을 파괴하거나 데이터를 지울 수 있으며 최악의 경우에는 시스템을 멈출 수 있다. 이처럼 운영체제 영역이나 다른 프로그램 영역으로 침범하려는 악성 소프트웨어를 바이러스(Virus)라고 한다. 

 

 운영체제도 소프트웨어 중 하나이므로 CPU를 사용하는 작업 중 하나이다. 사용자의 작업이 진행되는(사용자 프로세스가 CPU를 차지하는) 동안 운영체제는 잠시 중단된다. 따라서, 운영체제가 중단된 상태에서 메모리를 보호하려면 하드웨어의 도움이 필요하다. 

 

 메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터(Bound Register)에 저장한 후 작업을 한다. 또한, 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터(Limit Register)에 저장한다. 그리고 사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검해서 메모리를 보호한다. 

 

 B 작업의 메모리 시작 주소 140은 경계 레지스터에, B 작업의 크기인 40은 한계 레지스터에 저장된다. B 작업이 데이터를 읽거나 쓸 때마다 CPU는 해당 작업이 경계 레지스터와 한계 레지스터의 주소값 안에서 이루어지는지 검사한다. 만약 두 레지스터의 값을 벗어나면 인터럽트(Interrupt)가 발생한다. 인터럽트가 발생하면 모든 작업이 중단되고 CPU는 운영체제를 깨워 인터럽트를 처리하도록 시킨다. 운영체제가 실행되면 해당 프로그램을 강제 종료시킨다. 이처럼 메모리 영역은 하드웨어와 운영체제의 협업에 의해 보호받는다. 

 


    부팅(Booting)    

 

  응용프로그램은 운영체제가 메모리에 올려서 실행하는데, 운영체제는 누가 메모리에 올려서 실행될까? 운영체제도 CPU에 의해 실행되기 때문에 누군가에 의해 메모리에 올라와야 한다. 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(Booting)이라고 한다.

 

 

 사용자가 컴퓨터의 전원을 키면 롬(ROM)에 저장된 바이오스(Bios)가 실행된다. 바이오스는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인한다. 만약 이상이 있으면 삐 소리와 함께 오류 메세지를 출력하고, 이상이 없으면 하드디스크 마스터 부트 레코드(Master Boot Record, MRB)에 저장된 작은 프로그램을 메모리로 가져와 실행한다. 

 

 마스터 부트 레코드는 하드디스크의 첫 번째 섹터를 가리키며, 운영체제를 실행하기 우한 부트스트랩(Bootstrap) 코드가 이 곳에 저장되어 있다. 부트스트랩 코드는 운영체제를 메모리에 가져와 실행하는 역할을 하는 작은 프로그램이다.

 

 마스터 부트 레코드에 저장되어 있는 부트스트랩이 메모리에 올라오면 하드디스크에 저장된 운영체제를 메모리로 불러온다. 따라서, 마스터 부트 레코드가 손상되면 운영체제를 실행할 수 없다. 이는 컴퓨터 바이러스의 좋은 공격 대상이 된다. 따라서, 일부 바이오스는 사용자 옵션 부분에 운영체제 보호 항목을 만들어 마스터 부트 레코드를 수정할 수 없게 한다. 

 

'운영체제 > 기초' 카테고리의 다른 글

8. 병렬처리  (0) 2020.10.16
7. 컴퓨터 성능 향상 기술  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05
3. 운영체제의 구조  (0) 2020.10.05

   CPU의 기본 구성   

 

 CPU는 명령어를 해석하여 실행하는 장치로 산술논리 연산장치, 제어장치, 레지스터로 구성된다. 요리를 하는 과정에서 빗대어보면 요리사에 해당한다. 

 

  • 산술논리 연산장치(Arithmetic and Logic Unit, ALU): 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술 연산과 AND, OR 같은 논리 연산을 수행한다. 요리에 비유하면 요리사가 재료를 손질하는 것이다.
  • 제어장치(Control Unit): CPU에서 작업을 지시하는 부분으로 요리에 비유하면 요리사가 머릿속으로 '도마 위의 재료를 가져와라', '양파 껍질을 미리 벗겨 놓아라' 등의 지시가 이루어지는 것이다. 
  • 레지스터(Register): CPU 내에 데이터를 임시로 보관하는 곳이다. 요리에 비유하면 재료를 냄비에 필요한 만큼 잠시 넣어두는 것이다.

   CPU의 명령어 처리 과정   

 

 간단한 덧셈 프로그램으로 산술논리 연산장치, 제어장치, 레지스터가 어떻게 협업하는지 살펴보면 다음과 같다. 

 

int a = 2, b=3, sum;
sum = a + b;

 

 위의 소스코드는 사람이 인식할 수 있지만 CPU는 0과 1의 2진수로 이루어진 기계어만 인식하기 때문에 컴파일러를 통해 기계어로 바꿔야한다. 기계어는 사람이 인식하기 어려운 언어이므로 위의 소스코드를 어셈블리어로 바꾸어 보면 다음과 같다.

 

LOAD mem(100), register 2;
LOAD mem(120), register 3;
ADD register 5, register 2, register 3;
MOVE register, mem(160);

 

 CPU가 연산을 하려면 필요한 데이터를 CPU로 가져와 임시로 보관해야 하는데 이 때에는 레지스터를 사용하여 메모리 100번지와 120번지에 있는 값을 레지스터 2와 3으로 가져온다. 데이터가 준비되면 산술논리 연산장치에서 두 값을 더하여 그 결과값을 레지스터 5에 저장하고 레지스터 5에 저장된 값을 최종적으로 메모리의 160번지로 옮긴다. 

 

 제어장치는 위의 명령어들을 해석하여 제어 신호를 보내고 CPU 내의 데이터 흐름을 조절한다. 가령 위의 예에서 '메모리에서 데이터를 가져와라', '덧셈을 실행하라', '덧셈한 결과값을 메모리로 옮겨놔라'라는 신호이다. 아래 그림은 위의 소스 코드를 CPU의 명령어 처리 과정으로 나타낸 것이다. 

 


   레지스터의 종류   

 

 레지스터의 종류에는 여러 가지가 있는데, 위의 예에서 예를 들었던 레지스터는 데이터 레지스터(DR)와 주소 레지스터(AR)이다. 

 

  • 데이터 레지스터(Data Register): 메모리에서 가져온 데이터를 임시로 보관할 때 사용한다. CPU에 있는 대부분의 레지스터가 데이터 레지스터이기 때문에 일반 레지스터라고도 불린다.
  • 주소 레지스터(Address Register): 데이터 또는 명령어가 저장된 메모리의 주소를 저장한다. 

 이 밖에도 특별한 용도로 사용되는 레지스터도 있는데 이를 특수 레지스터라고 부른다. 이는 사용자가 임의로 변경할 수 없다.

 

  • 프로그램 카운터(Program Counter): CPU는 다음에 처리해야 할 명령어를 알아야 한다. 따라서, 프로그램 카운터는 다음에 실행할 명령어의 주소를 가리킨다. 명령어 포인터라고도 불린다.
  • 메모리 주소 레지스터(Memory Address Register): 메모리에서 데이터를 가져오거나 보낼 때 주소를 지정하기 위해 사용한다. 명령어를 처리하는 과정에서 필요한 메모리 주소를 저장한다.
  • 메모리 버퍼 레지스터(Memory Buffer Register): 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장한다. 항상 메모리 주소 레지스터와 함께 동작한다. 

  위의 어셈블리어 코드 1행은 아래 그림과 같다.

 

  ① 프로그램 카운터에는 현재 실행 중인 코드의 행 번호 1이 저장되어 있고 이 번호는 제어장치에 전송된다.

  ② 제어장치가 명령어 레지스터에 있는 명령어를 해석하여 메모리에 있는 데이터를 가져오라는 제어 신호를 보낸다.

  ③ 메모리 주소 레지스터에는 100이 저장되고, 메모리 관리자는 메모리의 100번지에 저장된 값을 메모리 버퍼 레지스터로 가

      져온다.

  ④ 제어장치는 메모리 버퍼 레지스터에 저장된 값을 레지스터 2로 옮긴다. 

 

 

 

'운영체제 > 기초' 카테고리의 다른 글

7. 컴퓨터 성능 향상 기술  (0) 2020.10.14
6. CPU와 메모리(2)  (0) 2020.10.14
4. 하드웨어의 기본 구성  (0) 2020.10.05
3. 운영체제의 구조  (0) 2020.10.05
2. 운영체제의 역사  (0) 2020.09.28

 

   하드웨어의 구성  

 

 컴퓨터는 중앙처리장치(CPU), 메인메모리, 입출력장치, 저장장치로 구성된다. 여기서 중앙처리장치와 메인메모리필수장치로 분류된다. 나머지 부품은 주변장치라고 불린다. 

 

 메인메모리는 전력이 끊기면 데이터를 잃어버리기 때문에 데이터를 영구히 보관하려면 하드디스크나 USB 메모리를 사용해야 한다. 여기서 메인메모리는 제1저장장치(First Storage), 하드디스크나 USB 메모리는 제2저장장치(Second Storage) 또는 보조저장장치라고 부른다. 보통 메인메모리를 메모리, 보조저장장치를 저장장치로 지칭한다. 

 

   1. CPU와 메모리

      - CPU는 명령어를 해석하고 실행하는 장치로 인간의 두뇌에 해당한다. 

      - 메모리는 작업에 필요한 프로그램과 데이터를 저장하는 저장소로 바이트(Byte) 단위로 분할되어 있으며 분할 공간 마다

        주소로 구분한다. 

 

   2. 입출력장치

      - 입력장치는 외부의 데이터를 컴퓨터에 입력하는 장치로 키보드, 마우스, 스캐너, 터치스크린이 해당한다.

      - 출력장치는 처리한 결과를 사용자가 원하는 형태로 출력하는 장치로 프린터, 모니터, 스피커 등이 있다. 

 

   3. 저장장치

      - 메모리는 전자의 이동으로 데이터를 처리하지만 하드디스크나 CD와 같은 저장장치는 구동장치가 있는 기계이므로 속도

        가 느리다. 하지만, 저장장치는 메모리보다 저렴하고 용량이 크고 전원 꺼짐과 상관없이 데이터를 영구적으로 저장할 수

        있다. 대표적인 예로은 DVD, USB 드라이버, SD 카드, SSD 등이 있다.

 

  4. 메인보드

      - 컴퓨터의 다양한 부품은 버스로 연결된다. 버스는 일정한 규칙에 따라 각 장치에 데이터를 전송하는 역할을 한다. 즉, 버스

        는 각 장치를 연결하는 선의 집합이자 데이터가 지나다니는 통로이다. 

      - 메인보드는 CPU와 메모리 등 다양한 부품을 연결한 커다란 판으로 버스가 복잡하게 얽혀있다. 메인보드에는 각종 부품을

        꽂을 수 있는 단자가 있는데 이 단자에 그래픽카드, 사운드카드, 랜카드 등을 장착할 수 있다.

 

 

이미지 출처: 위키피디아


 

   폰노이만 구조  

 

 오늘날 대부분의 컴퓨터는 폰노이만 구조를 따르는데, 폰노이만 구조는 아래 그림과 같이 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말한다. 폰노리만 구조에서 가장 중요한 특징은 "모든 프로그램은 메모리에 올라와야 실행할 수 있다."는 것이다. 예를 들어, 워드 파일은 하드디스크에 저장되지만 프로그램과 데이터가 저장장치에서 바로 실행되지는 않는다. 저장장치에 있는 프로그램을 실행하려면 프로그램이 메모리에 올라와야 한다. 운영체제 또한 프로그램이기 때문에 메모리에 올라와야 실행이 가능하다. 

 

 

 

 


 

   하드웨어 사양 관련 용어  

 

  • 클록(Clock)은 CPU의 속도와 관련된 단위이다. CPU가 작업할 때 일정한 박자를 통해 수행하는데 이 박자를 만들어 내는 것이 클록이다. 클록이 일정 간격으로 틱(Tick)을 만들면 거기에 맞추어 CPU 안의 모든 구성 부품이 작업을 한다. 틱은 펄스(Pulse)라고도 한다. 버스에는 여러 개의 부품이 연결되어 있는데, 메인보드의 클록이 틱을 보낼 때마다 데이터를 보내거다 받는다.
  • 헤르츠(Hz)는 틱이 발생하는 속도를 나타내는 단위이다. 1초에 틱이 몇 번 발생하는지를 나타내는데, 1초에 클록틱이 한 번이면 1Hz, 1000번이면 1KHz이다. 버스도 틱에 맞추어 데이터를 전송하기에 메인보드의 성능을 클록(Clock)으로 표시한다. 
  • 시스템 버스는 메모리와 주변장치를 연결하는 버스로 전면 버스(Front-side Bus)라고 한다. CPU 내부 버스는 CPU 내부에 있는 장치를 연결하는 버스로 후면 버스(Back-side Bus)라고 한다. CPU는 CPU 내부 버스의 속도로 작동하고 메모리는 시스템 버스의 속도로 작동하기 때문에 두 버스의 속도 차이로 인해 작업이 지연되는 문제가 있다.(문제는 다음에 나온다.)

 

'운영체제 > 기초' 카테고리의 다른 글

6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
3. 운영체제의 구조  (0) 2020.10.05
2. 운영체제의 역사  (0) 2020.09.28
1. 운영체제  (0) 2020.09.28

 

   커널과 인터페이스  

 

 커널(Kernel)프로세스, 메모리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 담당한다. 자동차에 비유하면 자동차 성능을 좌우하는 엔진과 같다. 

 

 그리고 자동차가 움직이는 데에 엔진은 물론이고 사람이 조작할 수 있는 핸들과 브레이크가 필요하다. 또한, 현재 시속, 기어 상태 등을 알려주는 계기판이 있어야 하는데 이를 인터페이스라고 한다. 운영체제에서는 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려주는 역할을 한다. 

 

 

 

 정리하자면 사용자와 응용 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에게 돌려주는 인터페이스와 운영체제의 핵심 기능을 모아놓은 커널이 운영체제를 담당한다.

 

 또한, 같은 커널을 사용하더라도 다른 인터페이스를 사용하면 다른 운영체제처럼 보인다. 유닉스의 사용자 인터페이스를 셸이라고 하는데 C셸, T셸, 배시셸 등 다양하다. 이처럼 유닉스는 명령어 기반이기 때문에 일반인이 사용하기 불편하다. 하지만, 편리한 인터페이스를 자랑하는 MAC OS X도 유닉스 계얼의 커널을 이용해 만든 것이다. 이처럼 사용자 입장에서는 커널보다 인터페이스가 먼저 보이기 때문에 좋은 커널보다는 좋은 인터페이스의 컴퓨터를 사용하려는 경향이 있다. 


 

   시스템 호출과 디바이스 드라이버  

 

 시스템 호출(System Call)은 커널이 자기 자신을 보호하기 위해 만든 인터페이스이다. 커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 저원에 직접 접근하는 것을 차단한다. 따라서, 자원을 이용하려면 시스템 호출이라는 인터페이스를 이용하여 접근해야 한다. 

 

  그렇다면 직접 접근하는 것과 시스템 호출을 통한 접근은 무엇이 다를까? 어떤 응용 프로그램은 dog를 다른 응용 프로그램은 cat을 하드디스크에 저장한다고 가정해보면

 

  •  직접 접근: 두 응용 프로그램이 자기 마음에 드는 위치에 데이터를 저장할 것이다. 하지만, 다른 사람의 데이터를 지우고 덮어쓸 수 있고 반대로 내 데이터가 다른 사람에 의해 지워질 수 있다.
  • 시스템 호출을 통한 접근: 커널이 제공하는 write() 함수를 사용하여 데이터를 저장해달라고 요청하면 응용 프로그램은 데이터가 하드디스크의 어느 위치에 어떤 방식으로 저장되는지 알 수 없다. 데이터를 찾고 싶다면 read() 함수로 시스템 호출을 통해 접근한다. 이 때에는 커널이 데이터를 저장하는 것에 전적으로 책임지기 때문에 컴퓨터 자원을 관리하기 수월하다. 

 

 응용 프로그램과 커널의 인터페이스가 시스템 호출이라면 커널과 하드웨어의 인터페이스는 드라이버(Driver)가 담당한다. 컴퓨터 하드웨어는 종류가 다양한데 운영체제가 많은 하드웨어를 사용할 수 있는 환경을 제공하려면 각 하드웨어에 맞는 프로그램을 직접 개발해야 한다. 하지만, 현실적으로 커널이 각각의 인터페이스를 다 개발하기에는 어려울 뿐더러 각 하드웨어의 특성은 하드웨어 제작자가 가장 잘 알기에 하드웨어 제작자가 관련 소프트웨어를 만드는 것이 더 유리하다.

 

 따라서, 커널은 입출력의 기본적인 부분만 제작하고 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다. 이 때, 이 소프트웨어를 디바이스 드라이버라고 부른다.  

 

 

 정리하면 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 관련된 함수이고 응용 프로그램이 하드웨어 자원에 접근하거나 운영체제가 제공하는 서비스를 이용할 때에는 시스템 호출을 통해 이용해야 한다. 드라이브는 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 존재한다. 따라서, 하드웨어는 커널과 직접 연결되기도 하고 제작자가 제공하는 드라이버를 통해 연결되기도 한다. 

 


 

   커널의 구성  

 

 운영체제의 핵심 기능인 커널은 다음과 같은 역할을 한다. 

 

 

 또한, 커널은 위의 기능들을 어떻게 구현하는지에 따라 단일형, 계층형, 마이크로 구조형 커널로 구분된다.

 

 단일형 구조 커널은 초창기의 운영체제 구조로 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있는 것이다. 초기 운영체제는 기능을 구현하는데에 초점을 두었기 때문에 모듈을 분리하여 구현할 만한 여력이 없었다. 비유하자면 함수를 거의 사용하지 않고 main()에 모든 기능을 구현한 형태와 같다. 

 

 모듈 간 통신 비용이 준다는 장점이 있지만 모듈이 하나로 묶여 있기에 버그나 오류를 처리하기 어렵고 기능상의 작은 결함이 시스템 전체로 확산될 수 있다. 

 

 

 계층형 구조 커널은 비슷한 기능을 가진 모듈을 묶어서 하나의 계층을 만들고 계층 간의 통신을 통해 운영체제를 구현하는 방식이다. 단일형 구조 커널보다는 버그나 오류를 쉽게 처리할 수 있고 해당 계층만 수정하면 되기에 디버깅이 쉽다. 오늘날의 운영체제는 대부분 이 구조로 되어 있다.

 

 

마이크로 구조 커널은 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공한다. 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다. 마이크로 구조에서 각 모듈은 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않는다. 또한, 다른 컴퓨터에 이식하기 쉽고 가벼워 CPU 용량이 작은 시스템에도 적용이 가능하다. 

 


 

   가상머신  

 

 C 언어는 어셈블리어 같은 저급 언어의 기능을 가져 시스템 프로그래밍 언어로 적합하고 대표적인 운영체제는 유닉스이다. 하지만, C 언어는 다른 커널을 가진 운영체제와 호환성이 떨어진다. 여기서 호환성이 떨어진다는 것은 한 쪽에서 만든 소스코드가 다른 운영체제에서는 작동하지 않는다는 것을 말한다. 예를 들어, 유닉스에서 C언어로 만든 코드가 윈도우 운영체제에서 작동하지 않는 것이 그 예에 해당한다. 

 

 이러한 호환성 문제를 해결한 언어가 자바(Java)인데 자바로 프로그래밍을 하면 대부분의 운영체제에서 작동한다. 자바가 작동하는 원리는 운영체제 위에 가상머신(Virtual Machine)을 만들고 그 위에서 응용 프로그램이 작동하는 것이다. 즉, 가상머신은 서로 다른 운영체제에서 하나의 응용 프로그램으로도 작동할 수 있도록 만든 시스템이다.

 

 

 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것처럼 보인다. 따라서, 개발자가 하나의 코드만 만들면 여러 운영체제에서 똑같이 실행할 수 있다. 자바에서 가상머신을 만들어 배포한 것을 자바 가상머신(Java Virtual Machine, JVM)이라고 한다. 

 

 만약 하나의 컴퓨터에 두 가지 운영체제를 설치하기가 부담스러울 경우 가상머신을 설치하면 해결된다. 가상머신을 사용하면 호환성이 높아지지만 응용 프로그램이 가상머신을 통해서만 작동하기 때문에 느리다는 단점이 있다. 

 

'운영체제 > 기초' 카테고리의 다른 글

6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05
2. 운영체제의 역사  (0) 2020.09.28
1. 운영체제  (0) 2020.09.28

 

   개요   

 

 


 

   (1) 초창기 컴퓨터(1940년대)  

 

 최초의 컴퓨터인 에니악은 30톤 규모의 거대한 계산기로 미사일 탄도를 계산하기 위해 제작되었다. 에니악은 키보드, 마우스, 모니터와 같은 컴퓨터 자원이 없었고 운영체제 또한 없었다. 진공관이라는 소자를 사용하여 진공관이 켜지면 1, 꺼지면 0이라고 판단했고 이는 컴퓨터가 2진법을 사용하는 계기가 되었다. 에니악은 전선으로 논리회로를 구성하여 원하는 결과만 얻는 방식으로 다른 계산이나 수식을 사용하려면 전선을 다시 연결해야 했다. 

 


 

   (2) 일괄 작업 시스템(1950년대)  

 기술 발전을 거쳐 진공관에서 IC(Integrated Circuit)라는 칩으로 변화했다. 이 칩은 진공관과 전선으로 만들어진 논리회로를 아주 작은 크기로 구현하였다. 미약하지만 CPU와 메인 메모리가 있었으나 키보드, 모니터와 같은 입출력 장치가 없었다. 대신, 천공카드 리더(OMR)와 라인 프티러를 입출력 장치로 사용했다. 

 

 천공카드 리더와 라인 프리터를 사용함으로써 지금의 프로그래밍과 유사한 방식으로 다양한 소프트웨어를 개발할 수 있게 되었다. 하지만, 한 번에 한 가지 작업만 할 수 있었다. 이처럼 모든 작업을 한꺼번에 처리해야 하고 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능한 시스템을 일괄 작업 시스템(Batch Job System) 또는 일괄 처리 시스템이라고 한다. 일괄 작업 시스템은 운영체제가 사용되었으며 메인 메모리가 운영체제의 상주 영역과 사용자의 사용 영역으로 나뉘었다.

 

 


 

   (3) 대화형 시스템(1960년대 초)    

 

 1960년대 초반에는 모니터와 키보드가 등장했다. 이들은 비효율적인 일괄 작업 시스템을 대화형 시스템(Interactive System)으로 바꿔 놓았다. 일괄 작업 시스템과는 달리 대화형 시스템은 작업 중간에 사용자가 입력을 하고나 사용자에게 중간 결과값을 보여줄 수 있게 되었고 또한 중간 결과값을 출력하여 프로그램에 이상이 있는지 혹은 정상적으로 진행되는지 확인할 수 있게 되었다. 

 

 하지만 대화형 시스템에도 문제점이 있다. 일괄 작업 시스템은 입출력이 거의 없어 작업 시간을 예측할 수 있지만 대화형 시스템의 경우 작업 시간을 예측하기 어려웠다.  

 

 

 



   (4) 시분할 시스템(1960년대 말)   

 

 1960년대 후반에는 컴퓨터의 크기가 작아지고 계산 능력이 향상되었다. 하지만 상당히 비싸서 한 번에 하나의 작업만 수행하는 것은 낭비라 효율적인 방법이 필요했다. 연구가 진행되면서 다중 프로그래밍(multiprogramming) 기술이 개발되었다. 이는 하나의 CPU로 여러 작업을 동시에 실행할 수 있는 기술로 한 번에 하나의 작업만 처리할 수 있는 일괄 작업 시스템에 비해 효율성이 뛰어났다.

 

 하지만 여러 작업이 하나의 CPU를 공동으로 사용하면 작업이 끊겨 보일 텐데 어떻게 이를 구현한 것일까? 방법은 시간을 분할하는 것이였다. 다중 프로그래밍 시스템에서는 CPU 사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어 준다. 

 

 예를 들어, A~C 작업을 동시에 진행한다고 가정한다. CPU가 각 작업에 1초를 할당하면 작업이 끊어지면서 실행되겠지만 0.1초를 할당하면 각각 A~C 작업은 0.1초씩 할당되고 A 작업은 0.3초 뒤에 다시 CPU를 얻어 작업할 수 있다. 이처럼 시간 분배를 최대한 적게하여 반복되면 작업이 동시에 실행되는 것처럼 보인다. 

 

 

 

 이처럼 여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 하는 것을 시분할 시스템(Time Sharing System) 또는 다중 작업(Multitasking)이라고 한다. CPU 사용 시간을 잘게 쪼개어 나눠줌으로써 모든 작업이 동시에 처리되는 것처럼 보인다. 이 때의 시간 조각들을 타임 슬라이스(Time Slice) 또는 타임 퀀텀(Time Quantum)이라고 한다. 오늘날 대부분 시분할 시스템이 사용된다. 

 

 하지만, 시분할 시스템에도 단점이 존재한다. 시스템 내에 많은 작업이 공존할 경우, 중요한 작업이 일정 시간 안에 끝나는 것을 보장하지 못한다는 것이다. 이는 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 실시간 시스템(Real-time System)을 사용한다. 

 

시분할 시스템에서 동시에 실행되는 작업의 개수를 멀티 프로그래밍 수준(Level of Multiprogramming) 또는 멀티 프로그래밍 정도라고 한다. 일괄 작업 시스템은 멀티프로그래밍 수준이 1이고 위의 그림에서는 작업이 3개이므로 멀티프로그래밍 수준이 3이 된다. 

 

 시분할 시스템에서 여러 작업이 동시에 실행할 수 있다는 것은 한 사람이 여러 프로그램을 동시에 실행할 수 있다는 의미이기도 하고 여러 사람이 동시에 작업할 수 있다는 의미이기도 하다. 즉, 시분할 시스템은 하나의 컴퓨터에서 여러 사람이 동시에 사용할 수 있는 다중 사용자 시스템(Multi-user System)을 가능하게 했다. 값비싼 컴퓨터를 한 사람 또는 하나의 작업이 독점하는 것이 아닌 여러 사람이 동시에 사용할 수 있는 환경이 만들어졌다.

 

 



   (5) 분산 시스템(1970년대 말)   

 

 1970년대 말에는 인터넷이 등장했으며 서로 호환되지 않는 LAN들을 하나로 묶는 아르파넷(ARPAnet)이 만들어 졌고 컴퓨터 간 네트워킹을 위한 TCP/IP라는 프로토콜이 정의되었다.

 

 또한, 개인용 컴퓨터와 인터넷이 보급되면서 값이 싸고 크기가 작은 컴퓨터들을 묶어 대형 컴퓨터에 버금가는 시스템을 만들었는데 이를 분산 시스템(Distributed system)이라고 부른다. 분산 시스템은 네트워크 상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성한 시스템이다. 

 

 


 

   (6) 클라이언트/서버 시스템(1990년대 ~ 현대)   

 

 분산 시스템은 모든 컴퓨터가 동일한 지위이기 때문에 컴퓨터가 고장 나거나 추가되면 작업을 분배하고 결과를 모으기가 쉽지 않다. 클라리언트/서버 시스템(Client/Server Syetem)은 이러한 문제를 해결한다. 모든 컴퓨터의 지위가 동일한 분산 시스템과 달리 작업을 요청하는 클라이언트와 거기에 응답하여 요청받은 작업을 처리하는 서버의 이중 구조로 나뉜다. 웹 시스템이 전형적인 클라이언트/서버 구조를 이루고 있다. 

 

 클라이언트/서버 시스템도 문제점이 존재한다. 바로 서버 과부하인데 수십만명의 모든 요청이 서버로 집중되면서버가 다운 될 수 있다. 

 

 

 


 

   (7) P2P 시스템(2000년대 ~ 현대)   

 

 1990년대 말에 전 세계의 MP3 음악 파일을 공유하려는 시도가 있었는데 문제는 클라이언트/서버 시스템의 서버 과부하였다. 웹 페이지는 킬로 바이트 단위이지만 MP3 파일은 메가 바이트에 달하기 때문에 서버 과부하로 서비스를 할 수 없다. 

 

 서버의 부하를 줄일 수 있는 새로운 시스템으로 P2P 시스템(Peer-to-Peer System)이 만들어졌다. peer는 말단 노드, 즉 사용자의 컴퓨터를 가르키며, P2P는 서버를 거치지 않고 사용자와 사용자를 직접 연결한다는 의미이다. P2P 시스템에는 서버가 파일 검색만 맡고 사용자 간에 파일 전송이 이루어지기에 서버의 부하가 적다는 장점이 있다. 또 다른 예로는 메신저와 파일 공유를 들 수 있다. 

 

 다음 그림은 대용량 파일 공유 P2P 시스템의 작동 방법이다. 이 시스템에서는 같은 파일을 가진 여러 사람으로부터 데이터를 나누어 받는다. 예를 들어, korea.avi라는 동영상을 받는다면 korea.avi를 가진 여러 사용자로부터 조금씩 나누어 받아 하나의 파일을 완성하는 것이다. 당연히 파일을 가지고 있는 사람이 많을수록 속도가 빨라진다. 

 

 

 

 


 

   (8) 기타 컴퓨팅 환경(2000년대 초반 ~ 현대)   

 

 ■ 그리드 컴퓨팅

       - 정해진 기간에만 컴퓨터를 사용하고 지불할 수 있도록 컴퓨팅 자원을 구매하여 사용하는 컴퓨팅 환경을 그리드 컴퓨팅

       (Grid Computing)이라고 한다. 그리드 컴퓨팅은 분산 시스템 중 한 분야로, 서로 다른 기종의 컴퓨터들을 묶어 대용량

       의 컴퓨터 풀(Computer Pool)을 구성하고 이를 원격지와 연결하여 대용량 연산을 수행하는 컴퓨팅 환경이다. 대용량

       데이터의 연산을 소규모 연산으로 나누어 여러 대의 컴퓨터로 분산 시킨다는 점에서 분산 시스템이라고 볼 수 있다. 

 

      - 그리드 시스템은 일반인을 위한 시스템이라기 보다 연구용이나 상업용으로 이용되는 시스템으로 일반인은 웹 하드 서비

      스에서 경험할 수 있다. 서버에 엄청난 양의 데이터를 보관하고 있는 웹 하드는 과부하를 방지하기 위해 P2P 시스템 기술을

      사용한다. 또한, 웹 하드 서비스는 그리드 딜리버리 기술을 이용하여 사용자 몰래 프로그램을 깔아서 서버의 부하를 방지한

      다.

 

 

 ■ 쿨라우드 컴퓨팅

      - 클라우드 컴퓨팅(Cloud Computing)은 언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경

      으로 그리드 컴퓨팅과 SaaS(필요한 기능을 모아 서버에서 실행하고 사용자는 인터넷을 통해 필요한 서비스만 제공받으며

      월별로 혹은 서비스 이용량 만큼 비용을 지불하는 방식)를 합쳐놓은 방식이다. 

 

 

 ■ 사물 인터넷

      - 사물 인터넷(Internet of Things)은 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술이다. 인터넷으로 연결

      된 사물들이 데이터를 주고 받아 스스로 분석하고 학습한 정보를 사용자에게 제공하거나 서비스를 창출한다. 인공지능, 로

      봇 공학, 무인 운동 수단 등에 쓰인다. 

 

'운영체제 > 기초' 카테고리의 다른 글

6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05
3. 운영체제의 구조  (0) 2020.10.05
1. 운영체제  (0) 2020.09.28

 

   일상 속 운영체제   

 

 OS(Operating System)라고 일컫는 운영체제는 일반 컴퓨터나 노트북의 전원을 켜면 가장 먼저 만나게 되는 소프트웨어이며 대표적인 예로 윈도우, 유닉스, 리눅스, 안드로이드, iOS 등이 있다.

 

 또한, 컴퓨터와 스마트폰 뿐만 아니라 MP3 플레이어, 내비게이션, PMP, 전자사전 등에도 운영체제가 있다. 이처럼 CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제를 임베디드 운영체제 또는 임베디드 시스템이라고 한다. 

 

 임베디드 운영체제를 사용하는 기계와 그렇지 않은 기계는 차이가 있는데 운영체제가 없는 MP3 플레이어는 처음 구현한 기능 외에 다른 기능을 추가할 수 없다. 하지만, 임베디드 운영체제가 있는 기계는 음질을 향상하거나 다양한 종류의 음악 파일을 지원하도록 기능을 추가할 수 있다. 블루투스(무선 통신)을 이용하여 MP3 파일도 공유할 수 있다. 유선 전화기와 스마트폰도 마찬가지이다. 다시 말해, 임베디드 운영체제가 있는 기계는 기능을 계속 향상시킬 수 있다.  

 


 

   운영체제의 필요성  

 

 초기의 컴퓨터는 정해진 계산만 수행했기 때문에 특별한 사용 규칙이 필요 없었다. 하지만, 시대가 변함에 따라 메모리, CPU 등의 성능이 향상되고, 여러 작업을 동시에 수행할 수 있는 기능이 조성되면서 사용 규칙이 필요해졌다. 복잡한 작업 환경에 사용 규칙이 없으면 기계를 망가뜨릴 수 있기 때문에 등장한 것이 운영체제이다. 

 

 운영체제가 있는 기계는 새로운 기능의 추가나 성능의 변경이 가능하므로 성능 및 효율성을 꾀할 수 있으며, 이러한 기계를 프로그램이 가능한(programmable) 기계라고 부른다.  

 

 그렇다면 운영체제는 성능을 향상하는데에만 필요할까? 운영체제는 성능 향상뿐 아니라 자원 관리라는 중요한 역할도 한다. 우리는 컴퓨터를 사용할 때 웹 브라우저, 채팅, 음악 재생 소프트웨어 등을 동시에 사용한다. 이러한 소프트웨어를 응용 프로그램(application program)이라고 한다. 

 

하지만, 많은 응용 프로그램에 비해 컴퓨터를 구성하는 장치는 매우 제한적이다. 즉, 대부분이 하나의 키보드, CPU, 메모리, 마우스, 모니터, 하드 디스크 등으로 이루어져 있어 각각의 응용 프로그램이 이 장치를 서로 독차지하려 한다. 이러한 문제를 해결하려면 자원을 관리하는 강력한 중재자가 필요하다. 이 중재자는 누구에게 먼저 키보드를 주어야 할지, 모니터를 주어야 할지 등을 결정하고 악의적인 응용 프로그램으로부터 보호하는 역할도 한다. 

 

 

 

   운영체제는 자원을 어떻게 관리할까?  

 

 기술이 발달하면서 메모리 크기가 커지고 하드 디스크, 마우스, 사운드 카드, 그래픽카 드, 네트워크 카드 등 다양한 주변장치가 등장하게 되었다. 이렇게 컴퓨터에 부착된 모든 장치를 컴퓨터 자원(Computer Resource)이라고 한다. 

 

 운영체제는 사용자가 직접 자원에 접근하는 것을 막음으로써 자원을 보호하고 관리한다. 예를 들어, 사용자가 하드 디스크에 데이터를 저장하는 경우라고 가정한다. 사용자는 하드 디스크의 특정 위치에 저장할 수 없으며 운영체제가 알아서 적당한 위치에 저장한다. 만약 사용자가 하드 디스크에 데이터를 저장할 수 있다면 악의적인 사용자가 데이터를 지우거나 덮어쓰는 일이 발생할 수 있다. 이 때문에 운영체제는 응용 프로그램과 사용자에게 모든 자원을 숨긴다. 

 

 대신 운영체제는 사용자가 자원을 이용할 수 있는 여러 방법을 제공한다. 한 예로 사용자가 저장하려는 데이터를 운영체제에게 주면 운영체제는 하드 디스크의 적당한 장소에 저장하고 번호표를 사용자에게 돌려준다. 이와 같이 사용자가 컴퓨터 자원을 사용할 수 있도록 해주고 그 결과를 알려주는 것을 인터페이스(Interface)라고 한다.

 

 좀 더 쉽게 설명하면 인터페이스는 자동차에서 핸들 및 계기판과 같다. 자동차는 엔진과 바퀴로 움직이지만 운전자가 핸들로 조종하고 계기판을 통해 현재 주행 상황을 인지한다. 마찬가지로 컴퓨터는 CPU와 메모리로 명령을 처리하지만 사용자가 키보드나, 마우스로 자료를 입력하고 출력 결과를 얻는다. 즉, 운영체제 인터페이스를 통해서만 컴퓨터 자원을 사용할 수 있다. 

 

 운영체제는 사용자가 컴퓨터를 보다 쉽게 사용할 수 있도록 다양한 인터페이스를 제공함으로써 컴퓨터 자원을 보호함과 동시에 사용자의 편의를 도모한다. 

 

 


 

   운영체제란 무엇인가?    

 

 운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어이다. 

 

 레스토랑을 예로 들면, 손님이 레스토랑에서 음식을 주문하면 웨이터가 그 음식을 주방에 알려주고 손님은 주문한 음식을 제공받는다. 이 때, 손님은 주방에 들어갈 수 없다. 직접 조리하거나 주방 기구를 만지려 한다면 레스토랑 관리자가 저지할 것이다. 운영체제도 마찬가지이다. 사용자가 하드 디스크의 특정 위치에 저장하려고 하면 기존 데이터와 섞여 엉망이 되므로 운영체제가 중재하여 대신 데이터를 저장하고 꺼내준다. 

 

 다시 말해 운영체제는 여러 응용 프로그램에 컴퓨터 자원을 적절히 나누어주는 역할을 한다. 

 

 

 



   운영체제의 역할   

 

 ■ 자원 관리

       - 운영체제는 키보드, 마우스, 네트워크카드, 사운드카드등의 컴퓨터 자원을 응용 프로그램에 분배하여 사용자가 원할하게

       작업할 수 있도록 돕는다. 자원을 요청한 프로그램이 여러 개라면 적당한 순서로 자원을 배분하고 적절한 시점에 자원을 회

       수하여 다른 응용 프로그램에 나누어 준다.

 

 ■ 자원 보호

      - 컴퓨터 내의 자원을 악의적인 사용자나 미숙한 사용자로부터 보호하는 것도 중요하다. 어떤 응용 프로그램이 남의 영역을

       침범한다면 다른 사람의 작업을 망치거나 데이터를 지울 수 있기 때문에 비정상적인 작업으로부터 컴퓨터 자원을 지키는

       것이 중요하다.

 

 ■ 하드웨어 인터페이스 제공

      - 어떤 제품을 사용할 때마다 별도의 소프트웨어를 설치한다면 불편할 것이다. 하지만, 운영체제는 복잡한 과정 없이 다양한

      장치를 사용할 수 있도록 해주는 하드웨어 인터페이스를 제공한다. 하드웨어 인터페이스 지원은 드라이버를 컴퓨터에 설치

      해야 가능한데 운영체제는 하드웨어 인터페이스가 자동으로 설치되게 함으로써 하드웨어의 종류에 상관없이 사용할 수 있

      다. 

 

 ■ 사용자 인터페이스 제공

    - 과거에 유닉스 MS-DOS와 같은 운영체제로 작업할 때는 마우스 없이 키보드만 가능했다. 여러모로 불편하며 일반인이 사

    용법을 배우기가 쉽지 않았다. 하지만 운영체제가 사용자 인터페이스(Graphical User Interface)를 제공하므로 대부분의

    작업을 마우스로 수핼할 수 있다. 이처럼 운영체제를 편리할 수 있게 사용할 수 있도록 제공되는 기능이 사용자 인터페이스

    이다. 

 

 

 

 

 



   운영체제의 목표   

 

 

 

 ■ 효율성

       - 같은 작업량을 처리하는 데 보다 적은 자원을 효율적으로 사용하는 것이 중요하다. 효율적인 자원 관리는 다양한 방법으

       로 이루어질 수 있는데, 일반적으로 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화 하는 것이다.

 

 ■ 안정성

      - 운영체제가 불안하면 그 피해가 고스란히 사용자에게 돌아가기 때문에 운영체제는 안정성이 담보되어야 한다. 흔히 발생

       하는 예로 문서 작업을 하고 있는데 갑자기 컴퓨터가 다운되어버리는 일이 일어나서는 안된다. 이처럼 안정적이려면 사용

       자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제를 처리할 수 있어야 하며 문제가 발생했을 때 이전으로 복구하

       는 결팜 포용 기능을 수행해야 한다.

 

 ■ 확장성

      - 운영체제는 다양한 시스템 자원을 추가하거나 제거하기 편리해야 한다. 즉, 확장성이 좋아야 한다. 하드웨어의 종류에 상

       관없이 꽂으면 바로 실행할 수 있는 플러그 앤 플레이 기능을 제공해야 한다. 

 

 ■ 편리성

   - 사용자에게 편리하게 작업할 수 있는 환경을 제공하는 것도 중요하다. 사용자에게 GUI를 제공하지 않고 텍스트만 사용하게

   하면 운영체제의 효율성은 높아질 수 있지만 사용자 입장에서는 엄청 불편할 것이다. 따라서, 응용 프로그램과 사용자에게 다

   양한 편리성을 제공하면서도 자원의 낭비 요소를 막아야 한다.

'운영체제 > 기초' 카테고리의 다른 글

6. CPU와 메모리(2)  (0) 2020.10.14
5. CPU와 메모리(1)  (0) 2020.10.06
4. 하드웨어의 기본 구성  (0) 2020.10.05
3. 운영체제의 구조  (0) 2020.10.05
2. 운영체제의 역사  (0) 2020.09.28