본문 바로가기

Computer Science

[CS] 컴퓨터의 기억장치와 운영체제(OS)의 역할

반응형

이번 포스팅에서는 컴퓨터의 기억장치와 운영체제의 역할에 대해서 개괄적으로 알아보도록 하자.

 

애플의 컴퓨터, 맥킨토시


1. 컴퓨터의 기억장치

먼저 컴퓨터의 기억장치라는 것은 곳 정보 즉 데이터를 담는 저장공간을 의미한다. 컴퓨터를 이루고 있는 기억장치의 개괄적인 그림은 아래와 같다.

 

컴퓨터와 관련된 기억장치들

 

위 기억장치 종류 중에서 먼저 하드디스크라고 불리는 HDD에 대해서 알아보도록 하자. 물론 여기서 SSD, USB 까지 다루지는 않지만 SSD, USB도 HDD랑 비슷한 계열의 저장장치라고 생각해주면 되겠다.

1-1. 용량도 크고 휘발되지 않지만 너무 느려! HDD

하드디스크는 컴퓨터의 보조기억장치 중 하나로 용량도 컴퓨터 내부에 있는 다른 저장장치들에 비해 매우 크다. 또한 컴퓨터의 전원을 끄더라도 하드디스크에 있는 데이터들을 휘발(삭제)되지 않는다. 하지만 치명적인 단점이 있으니 바로 읽고 쓰는 속도가 느리다는 점이다.

 

먼저 하드디스크가 어떻게 생겼는지 살펴보자.

 

출처: 위키피디아

 

왼쪽 그림이 바로 하드디스크의 실물이다. 그리고 오른쪽은 왼쪽 실물의 도넛모양의 판을 도식화해놓은 것이다. 하드디스크에 저장되는 데이터는 오른족 그림처럼 특정 트랙과 섹션의 영역에 저장이 된다. 그리고 이렇게 데이터가 하드디스크의 어떤 트랙과 어떤 섹션에 저장되어 있는지 적어놓는 테이블을 FAT(File Allocation Table)라고 한다. 물론 이 FAT는 테이블의 종류 중 하나로 FAT32, NTFS 같이 다른 종류들도 있다. 

 

하드디스크에 저장된 데이터를 컴퓨터가 읽어올 때는 왼쪽 사진에서 뾰족한 암이라고 불리는 것이 디스크를 막 왔다갔다 거리면서 데이터를 읽어온다. 그런데 내가 읽어 오려는 데이터가 하드디스크의 트랙과 섹터에 연속적인 영역을 차지할까? 그럴 수도 아닐 수도 있다. 만약 연속적인 영역을 차지하지 않고 있다면 연속적인 영역을 차지하는 데이터에 비해 읽는 속도가 떨어진다. 왜냐하면 여기저기 떨어져 있는 즉, 파편화된 데이터들을 암이 이리저리 계속 왔다갔다 해야하기 때문이다. 그래서 하드디스크는 이러한 문제를 막기 위해 데이터가 트랙과 섹터에 연속적인 영역을 차지하도록 하기 위해 일종의 정렬을 수행한다. 이것이 바로 조각모음이라고 한다. 이렇게 하면 컴퓨터의 I/O(입/출력) 속도를 높일 수 있다.

 

그런데 만약에 컴퓨터에서 하드디스크에 저장된 데이터를 삭제하기 위해서 어떻게 할까? 예를 들어, 우리가 바탕화면에서 특정 파일을 휴지통에 넣고, 거기서도 삭제했다고 가정해보자. 그럴 경우, 하드디스크는 특정 트랙과 섹터 영역에 있던 해당 데이터를 바로 삭제시키지는 않는다. 단, 위에서 배운 FAT라는 테이블에 해당 데이터가 삭제되었다고 하면서 테이블의 특정 필드 값을 'deleted' 라는 값으로 갱신시킨다. 그래서 우리가 휴지통에 넣은 파일을 삭제한다고 해도 당장 삭제되는 것은 아니다 FAT 기준으로 삭제되었다고 처리된다는 것이다. 그리고 난 뒤, 하드디스크에서 삭제시킨 해당 데이터가 차지하는 트랙과 섹터 영역이 다른 데이터로 인해 overwrite 되면 그제서야 실질적으로 하드디스크에서도 데이터가 삭제되게 된다.

1-2. 용량은 작고 휘발되지만 속도는 빠르다! RAM, Register, Cache 메모리

해당 목차에서 다루는 모든 기억장치들은 모두 컴퓨터 내부에 있는 것들이다. 하지만 RAM은 CPU 외부, 레지스터와 캐시 메모리는 CPU 내부에 있다. RAM에 대해서 먼저 알아보자. RAM을 쉽게 이해하기 위해서 우리는 신발장을 생각할 수 있다. 신발장 자체가 RAM이라고 한다면 신발장 각 칸에 붙어있는 번호는 메모리 주소를, 신발장 각 칸 안에 들어있는 신발은 데이터(정보)를 의미한다.

 

찜질방 신발장..

 

참고로 RAM은 1바이트(8비트) 단위마다 고유의 일련번호를 붙여서 데이터를 관리한다. RAM은 CPU가 산수계산을 하는 연습장이나 마찬가지다. 그리고 캐시 메모리는 CPU가 필요할 데이터를 미리 RAM에서 부터 가져온다. 그리고 레지스터는 CPU가 실질적인 연산을 수행할 때 데이터를 놓는(?) 곳이다. 이것들에 대한 관계를 CPU가 산술처리하는 과정을 통해 도식화하면 아래와 같다.

 

3 + 4 연산을 하는 과정을 도식화

 

상황은 다음과 같다. RAM에 저장되어 있는 데이터 3, 4를 활용해서 덧셈을 수행한 후 7이라는 결과를 만들고 이를 다시 RAM에 저장하는 과정이다. 위 그림의 ①~⑦번 단계를 눈으로 따라가면 된다.

2. 운영체제의 역할

다음은 운영체제의 역할에 대해서 간략하게 알아보자. 운영체제는 크게 3가지 일을 하는데, 접근제어, 동기화, 그리고 CPU와 RAM 같은 전산자원을 관리한다. 그래서 전산자원을 관리한다는 것은 곧 프로세스를 관리한다는 것을 의미한다.

 

먼저 컴퓨터는 크게 3개의 계층구조로 구성되어 있다. 하드웨어와 운영체저의 커널 모드, 운영체제의 사용자(User) 모드 이렇게 이다. 이 3가지를 쉽게 이해하기 위해 하드웨어는 영토, 커널모드는 국가, 유저 모드는 민간 개인이라고 비유할 수 있다. 

 

컴퓨터 구조는 3개의 계층으로 구성

 

위 그림에서 보는 것처럼 운영체제는 CPU, RAM 이라는 전산자원을 각 프로세스에 분배를 한다. 그리고 CPU는 실질적인 실행 단위인 쓰레드에게 연산을 분배한다. 참고로 프로세스를 태스크(task)라고도 부르며 동시에 여러 개의 태스크를 하는 작업을 멀티 태스킹이라고 한다. 그래서 운영체제는 이러한 멀티 태스킹 시 발생할 수 있는 문제인 동기화를 보장하기 위해 충돌이 나지 않도록 하는 것을 관리한다.

 

참고로 1개의 프로세스 내에서 여러 쓰레드들이 존재하는데, 각 쓰레드마다 스택이라는 메모리를 갖고 있다.(이는 실제 스택이라는 자료구조로 구현되어 있음). 그리고 모든 쓰레드가 공유할 수 있는 메모리 공간이 있는데(마치 한 집에서 같이 사는 가족들이 공유하면서 살아가는 화상질, 거실 구역처럼..) 이는 힙(Heap) 메모리와 실행코드 영역으로 구성되어 있다.


  • 동시성 : 여러 일(같은 일이던 다른 일이던)을 여러 사람이 각자 동시에 하는 것(또는 한 사람이 여러 일을 동시하는 것도..)
  • 병렬성 : 같은 일을 여러 사람이 각자 동시에 하는 것
  • 원자성 : 쪼개어 나눌 수 없는 연속된 특성. 즉, 하는 일의 중간에 방해를 받어선 안되는 것
  • 의존성

병렬성은 동시성에 포함되는 관계로, 동시성이 더 포괄적인 개념임. 보통 동시성이 수행되면 반드시 충돌이 갈 가능성이 존재함. 따라서 이를 막기 위해 동기화를 진행해야 함. 하지만 동기화를 잘못 진행하다가 교착상태(Deadlock)에 빠질 수 있음. 교착상태는 이러지도 저러지도 못하는 경우임(지금 하는 일을 수행하고 있는데, 그 다음 단계로 빠져나가지는 못하지만 다음에 수행해야 할 일들이 계속 대기중인 상태 등..)

 

 

 

반응형