운영체제에 대한 개념들 1 – 컴퓨터와 운영체제의 구조와 구성

Posted on

현대의 모든 컴퓨터들은 폰 노이만 시스템이나 하버드 아키텍처가 근간이 되는 경우가 많습니다. 이들 표준의 특징은 (1) 전기로 작동한다 (2) 메모리와 저장장치를 갖는다 (3) 운영체제가 존재하고 사용자의 입력과 상호작용을 한다 이구요. 현대화되어 발전된 체제에 의하면 멀티프로그램이나 멀티태스킹, 스레드, 고도화된 파일시스템 등을 지원하는 방대한 체계로 성장했습니다.

이번글에서는 운영체제와 컴퓨터 시스템이 어떻게 구성되어 있는지 살펴보고 이에 대한 입론을 소개하려고 합니다.

운영체제는 다들 아시듯이 하드웨어적인 컴퓨터 상에서 작동하는 제일 기반이 되는 소프트웨어를 말합니다. 단일한 기능을 수행하는 간단한 기계는 운영체제도 단순화되어 있고, 다양한 기능을 담당하는 범용 기계는 조금 더 복잡한 운영체제가 탑재되어 있습니다. 계산기에도 펌웨어 형태로 구동용 롬이 있는가하면, 현대화된 데스크탑 PC에는 윈도우나 리눅스, macOS 같은 진보된 운영체제가 탑재되어 있습니다.

현대 운영체제는 핵심 커널과 시스템 파일, 유틸리티, 미들웨어 등으로 기능을 극대화하는데 제작과 연구의 초점이 맞추어져 있네요. 하드웨어 아키텍처가 각 컴퓨터 브랜드마다 다르기도 하기에, 운영체제도 이 아키텍처와 상호작용하면서 구조와 구성이 결정됩니다.

데스크탑 PC에서는 사용자들의 편의성을 극대화하게 되어 있고, 휴대용 기기에서도 그렇습니다. 전문가용 서버 시스템에서는 데이터베이스, 그래픽스등의 처리에 특화된 체제로 운영체제와 하드웨어가 맞물려 돌아갑니다.

컴퓨터는 보통 일을 수행하기 위해 만들어진 기계이고, 이 수행성을 극대화하는데 모든 역량이 동원됩니다.

컴퓨터는 우선 공통된 버스에 연결된 여러 개의 장치와 제어기, 하나 이상의 CPU로 구성됩니다. CPU와 장치, 제어기는 버스와 메모리를 쓰기 위해 서로 경합하기도 하는데요. 운영체제는 중앙에서 이들 경합을 조율하고, 시스템 자원을 합리적으로 배분하기 위해 늘 바쁘게 일을 하는 구조입니다.

컴퓨터가 구동을 시작하면, 부트스트랩이 작동해서 하드웨어 점검이나 운영체제 시작 구동을 하구요. 이 과정이 마쳐지면 커널에게 하드웨어 제어권이 넘어가게 됩니다.

커널이 제어권을 갖게 되면 사용자에게 사용 권한이 넘어가구요. 커널과 상호작용하게 만들어진 서비스들은 프로세스가 되어 메모리에 적재된 데몬이나 백그라운드 서비스가 되어 사용자의 사용상황에 따라 적절한 기능을 백그라운드로 수행합니다.

컴퓨터 구동시 컴퓨터에서 일어난 일을 이벤트라고 하는데요. 커널과 제어기는 이벤트를 기다리고 있다가, 이로부터 일으켜진 트리거에 반응해서 적절한 작업을 실시간으로 수행합니다. 하드웨어가 어느 순간에 인터럽트 신호를 보내면 CPU는 즉시 그 작업으로 전환해서 수행시 본래의 작업으로 돌아옵니다. 시스템 호출입니다.

인터럽트는 발생하면 루틴이 호출하는 핸들러를 갖구요. 사용가능한 인터럽트의 수에 의해 고유의 작동을 보장합니다. 이를 지시하는 포인터가 메모리에 적재되어 있는 조건에서 하드웨어가 이 표준에 따라 인터럽트 백터에서 인터럽트 요청에 필요한 장치 색인을 참조해서 인터럽트를 처리합니다. 이 기준은 윈도우와 유닉스 모두에서 같습니다.

한편 CPU는 프로그램 수행시 메모리에 우선 프로그램의 파일들을 적재해야 합니다. 시스템마다 조금씩 다른 구조를 갖는 것이 메모리이지만, 대부분 주메모리와 같은 구조를 포함합니다. 16비트 PC와 32비트 PC에서 도스를 사용할때, 기본 메모리와 상위 메모리 등으로 구별하는 것과 같이, 각각의 운영체제는 고유의 메모리 구조를 갖고 있고, 이를 효율적으로 활용하고 설정하는 것이 운영체제와 사용자의 책임입니다.

보통 랜덤 액세스 메모리라고 불리우는 RAM은 휘발성이고, 전원이 끊기면 데이터가 날아갑니다. 그리고 순차 액세스 메모리에 비해 논리적으로 주소가 부여되어 전기가 통할때 특정 위치에 직접 접근이 가능해집니다. 순차 액세스 메모리는 컴퓨터 초창기의 메모리로, 특정 위치에 접근하려면 앞에서부터 그 위치까지 탐색이 필요했으므로 매우 느렸네요.

현대의 데스크탑 PC는 오래전의 메인프레임보다도 빠른 경우가 있다고 알려져 있습니다. 이는 메모리와 CPU간의 통신이 아주 빨라진데 기인한다고 볼 수도 있네요.

메모리는 각 바이트 당 주소가 부여되어 있습니다. 적재, 저장 등의 명령어로 컴퓨터와 소프트웨어가 상호작용하구요. 적재 명령은 바이트를 메모리에서 CPU의 레지스터로 옮기는 작업이고, 반대로 저장 작업은 레지스터의 내용을 메모리로 옮기는 작업입니다. 이로부터 컴퓨터 아키텍처별로 다른 레지스터가 존재하고 있어서, 주소와 명령 카운터, 색인, 간접 주소 등의 내부 기술에 의해 현재 실행중인 프로그램을 처리하는 원리로 열심히 작동하는 것이 운영체제와 컴퓨터 하드웨어 사이의 작동입니다.

메모리의 내용은 그 내용이 전원이 끊기면 지워지기에, 운영체제에서는 이를 따로 저장해둘 필요가 있습니다. 컴퓨터의 입출력 구조인데요. 공통 버스에 연결된 보조기억장치는 여러 종류의 인터페이스에 연결되어 있는 것이고, 운영체제와 이들 제어기, 장치 드라이버들의 상호작용에 의해 데이터를 저장해서 전원을 다시 켤때 데이터를 보존하게 됩니다.

운영체제 관점에서 이는 장치 드라이버 모델이나 파일시스템이라는 표준에 기반해서 작동을 시킵니다.

널리 쓰이던 파일시스템은 도스 시절에는 FAT16이 있었고, 윈도우 95부터 윈도우 ME까지는 FAT32, 윈도우 XP부터 윈도우 11까지는 NTFS가 쓰입니다. 유닉스는 보다 더 방대한 종류의 파일시스템과 호환되는 경우가 많아서, 리눅스의 경우 ext2, ext3, ext4, ReiserFS 등의 대안이 있습니다.

이들을 기본으로 해서 각각의 파일시스템은 고유의 구조를 가지며 성능이나 보조기억장치에 크기의 최대치를 결정받게 됩니다.

만약 주기억장치(주메모리)와 보조기억장치(HDD, SSD, USB 메모리 등)의 속도가 CPU의 처리속도에 한참 못미친다면, 운영체제가 최적화되어도 속도 향상에 한도가 있게 됩니다. 암달의 법칙이나 리틀의 법칙과 같은 법칙들이 이를 기술합니다.

한편 CPU는 단일처리와 다중처리로 나누어지는데요. 단일처리는 한번에 하나의 명령어 집합만 처리하는 것을 말하고, 다중처리는 하나의 실행시간을 시분할하여 처리하는 다중 처리 체제입니다. 한 시간 구간안에서 증가된 처리량을 보여주고 있고, 규모의 경제도 달성하며 CPU가 유휴 상태가 덜 되게 하는 보장이 됩니다. 이는 단일 PC에서 코어가 여러 개인 경우와, 클러스터형 시스템 등으로 달성이 되는데요. 운영체제는 이들 자원을 잘 할당해서 프로그램 처리를 효율화하는 것이 임무입니다.

이를 스켸쥴링 관점에서 접근하면 고전적인 관점에서나 최신의 관점에서나 운영체제의 진보 과정을 잘 알게 됩니다.

스켸쥴링 작업은 하드웨어 특히 CPU를 쉬지 않게 활용하여 속도의 이점도 살리고, 메모리가 보장하는 한도 내에서 최대한 많은 프로그램을 실행하여 작업의 효율도 살립니다.

시분할 운영체제는 시분할 되는 컴퓨터의 작은 부분을 제공하여 스켸쥴링과 다중프로그램을 제공합니다. 메모리에 최소 하나의 독립된 프로세스가 작동중이라면 메모리에 적재되어 실행되는 프로그램이 하나는 있다는 것입니다. 사용자가 여러 개의 프로그램을 실행시킨다면, 운영체제는 CPU 사이클을 분배해서, 첫 10ms에는 오디오 재생기를, 그 다음 10ms에는 웹브라우저를, 그 다음 10ms에는 문서편집기를 배정해서 이를 풀(full)로 돌리면, 동시에 작업이 진행되는 효과를 갖습니다. 이를 더 고도화해서 스레딩 기법을 적용하면 알고리즘에 따라 유휴 상태가 되는 빈 실행시간을 줄여 CPU가 쉬지 않게 활용해서 작업성의 효율을 증대하게 되는 것입니다.

즉 현대의 멀티태스킹 운영체제는 하드웨어 발전의 이점과 시분할 알고리즘의 책임을 가지고 있고, 이를 발전시키는 것이 버전업의 목표가 되기도 하네요. 버전업이 될때마다 성능 향상이 있는 이유입니다. 갈수록 처리해야 하는 데이터량은 늘고 있고, 하드웨어 발전도 이루어지고 있고, 이를 이어주는 것은 운영체제가 얼마나 발전된 자원의 배분을 해주느냐인데, 이는 스켸쥴링 알고리즘의 발달에도 한 축을 지닙니다.

앞서 말한 인터럽트도 스켸쥴링과 함께 가는 체제가 되었습니다.

일단 이정도로 정리해보구요. 핵심은

  • 현대적인 컴퓨터는 메모리와 보조기억장치, 운영체제, 응용소프트웨어로 구동된다
  • 운영체제는 하드웨어 자원을 효율적으로 관리하고 분배하며 응용소프트웨어가 작동할 환경을 제공한다
  • 이 자원의 효율적 분배와 안정성을 운영체제는 보장해야 한다
  • 이로부터 많은 개념이 개발되어 연구된다

입니다. 다음편에 더 상세한 개념을 소개해보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다