-

[운영체제 Step 1] - 운영체제란 본문

CS/운영체제

[운영체제 Step 1] - 운영체제란

흣차 2021. 12. 2. 23:08
728x90
반응형

운영체제란 컴퓨터 시스템 자원(하드웨어)를 효율적으로 관리해서 사용자 또는 응용 프로그램들에게 서비스를 제공하는 역할을 합니다.

즉, 컴퓨팅 자원을 사용자에게 서비스하는 것이 운영체제를 배우는 목표라고 할 수 있습니다.

그럼 컴퓨터 시스템에 대한 구성을 먼저 알아야 할텐데요. 

컴퓨터 시스템은 기본적으로 이렇게 네 가지로 이루어져 있습니다.

이 중 하드웨어에 대해 먼저 살펴보겠습니다.

하드웨어는 프로세서, 메모리, 주변장치 총 3가지로 구분할 수 있습니다. 

프로세스는 주로 계산하는 데 사용되며 주로 CPU와 최근엔 GPU도 자주 사용됩니다.

그리고 어떤 장치들은 목적을 위해 개발되기도 하는데 이것들을 응용 전용 처리장치라고 합니다.

두번째로 메모리라고 있는데, 이것은 주로 데이터를 기억하는데 사용됩니다. 이것 외에도 디스크 등도 메모리에 포함됩니다.

마지막으로 주변장치가 있습니다.

키보드, 마우스 등 주변 장치가 있겠습니다.

 

이제 자세히 한 번 살펴보도록 하겠습니다.

프로세서는 아까 정리했듯이 계산하는 역할을 수행합니다.

주로 연산을 수행할 뿐만 아니라 장치의 동작 제어도 수행합니다.

아래에 보시면 CPU 내부에 레지스터라고 있습니다. 레지스터란 프로세서 내부에 있는 메모리입니다.]

또한 컴퓨터에서 가장 빠른 메모리가 레지스터입니다. 

이 레지스터는 3가지에 따라 분류할 수 있습니다.

그 중 사용자 가시 레지스터는 데이터 레지스터와 주소 레지스터로 구분됩니다.

데이터 레지스터는 주로 데이터를 저장하는데 사용되고 주소 레지스터는 주소나 필요한 주소의 일부분만 저장한다는 부분을 기억해주시면 좋을 것 같습니다.

여러분은 레지스터를 보신 적이 있으신가요??

 

C언어를 배워보신 분이라면 아마 레지스터에 대해 익숙하실겁니다.

main()함수 내부에 num1은 레지스터 안에 공간을 잡아달라고 부탁을 한다는 의미입니다.

그렇다면 사용자 불가시 레지스터는 어떤 의미일까요?

이 중에서 프로그램 카운터, 명령어 레지스터, 누산기는 꼭 의미를 알고 계시면 좋을 것 같습니다.

자 우리가 프로그램을 짜면 라인마다 명령어가 있겠죠??? 그럼 이 다음에 우리가 실행할 명령어가 어디인지 가르키는 것. 이것이 프로그램 카운터(PC)라고 부릅니다.

그리고 이 때 실행되는 PC를 통해 들어갈 명령어가 명령어 레지스터, IR이라고 부릅니다.

그리고 일시적으로 계산할 때 일시적으로 저장하는 레지스터를 누산기(ACC)라고 한다는 것을 기억하고 계시면 컴퓨터 교양에 많은 도움이 될 것입니다.

프로세서는 이처럼 여러 레지스터의 역할 수행으로 명령어가 입력되는 것을 알고 계시면 좋겠습니다.

 

그렇다면 운영체제와 프로세서는 어떤 연관이 있을까요?

운영체제는 프로세서에게 처리할 작업 할당 및 관리를 하도록 합니다. 앞으로 배울 내용입니다.

또한 여러 프로그램을 사용하려고 할 때 사용 시간을 조율하는 것이 운영체제의 역할입니다.

 

메모리에 대해 알아보겠습니다.

여기서 제일 밑에 피라미드를 보시겠습니다.

보조기억장치는 HDD가 주로 있습니다. 

그리고 메인 메모리는 DRAM이 있고 캐시는 CPU안에 있는 녀석인데, 레지스터보다는 좀 더 멀리 떨어진 녀석입니다.

여기서 보시면 피라미드에서 위로 올라갈수록 속도가 빨라집니다. 당연히 속도가 빠르기 때문에 가격도 비싸지는 경향이 있습니다. 반면에 비싸질수록 용량은 적어지는 경향이 있습니다.

그렇다면 우리가 아주 좋은 컴퓨터 성능을 맞추기 위해 부자들은 레지스터만 1TB쓰면 어떻게 될까요?

우리 공학자들이 늘 하는 이야기가 있습니다. 최선의 가격으로 최고의 성능을 내는 것이죠. 그러기 위해서 이것들을 적절히 조합해서 최고의 성능을 내자는 것이 이런 계층이 탄생했다고 알면 되겠습니다.

오른쪽에 있는 저 장치를 DRAM이라고도 부르고 요즘은 DDR4를 사용하기도 합니다.

컴퓨터가 수행하는 프로그램과 데이터를 바로 저 메모리에 저장해야 합니다. 

왜그래야 하냐면 밑에 보시면 왼쪽에 표가 있습니다.

디스크의 속도를 보시면 현재까지 속도가 굉장히 더디느느 편입니다만 CPU는 속도가 굉장히 빨라졌습니다.

즉, CPU는 빠른데 메모리가 너무 느리기 때문에 문제가 발생했습니다. 그래서 저 사이에 디스크보다는 용량이 작지만 속도는 빠른 무언가를 놓기 위해, CPU가 일을 하는동안 그 사이 필요한 다음의 데이터를 미리 가져다 놓음으로써 Large Gp을 메꾸어주기 위해 메인 메모리가 가운데에 들어가게 됩니다.

다르게 얘기하자면 디스크까지 가는게 너무 느리기 때문에 성능을 빠르게 하는데 방해현상, 그러니까 병목현상을 해소하기 위해서 메인 메모리를 가운데에 두었다고 생각하시면 되겠습니다.

 

캐시로 넘어가겠습니다.

 왼쪽 밑의 그래프를 보시면 메모리를 넣었음에도 CPU의 속도와 차이가 점점 벌어지고 있습니다.

그러므로 이 현상을 똑같이 해결하기 위해 저 사이에 캐시라는 것을 두어 병목현상을 해결하기 시작합니다.

요즘에는 이 캐시를 세 영역으로 나누어서 (L1, L2, L3) 사용하고 있습니다.

하지만 이 캐시는 물리적으로 보는 것은 불가능하여 프로그램을 이용해서 볼 수 있습니다.

자 크기가 얼만가요??

L1을 보면 4 X 32KB라서 128KB입니다. 너무 작은데 이걸로 병목현상이 해소될까요?

이게 왜 가능하냐면 이제부터 한 번 살펴보도록 하겠습니다.

 

동작원리를 살펴보시면 1번에서 프로세서가 캐시에게 데이터가 있니? 라고 물을 수 있습니다.

만약에 캐시에 데이터가 있다면 있다고 응답 후(이것을 캐시 히트라고 합니다.) 메인메모리까지 가져가지 않고 그것을 프로세서에 데이터를 줌으로써 가져다 쓸 수 있게끔 도와줍니다.

근데 만약에 캐시에 원하는 데이터가 없다면 메인메모리에서 데이터를 가져다 와야합니다.(이것을 캐시미스)

이런 상황에선 오히려 손해가 일어날 수 있습니다.

그렇다면 왜 캐시의 용량은 128KB밖에 안되더라도 효율을 낼 수 있을까요? 

바로 이녀석 때문입니다.

공간적 지역성(Spatial locality)란 만약 참조한 주소 주변에도 참조할 가능성이 높다고 이야기하는 것이 공간적 지역성입니다.

그리고 시간적 지역성(Temporal locality)란 만약 어느 주소를 참조했다면 이 다음에도 또 그 주소를 참조할 가능성이 높다고 이야기하는 것이 시간적 지역성입니다. 주로 for문을 잘 생각해보세요.

 

즉 우리가 주로 짜는 프로그램들은 공간적 지역성, 시간적 지역성을 잘 따르고 있으며 이 지역성은 캐시적중률과 아주 밀접한 관련이 있습니다. 그리고 이것들이 잘 이루어져야만 알고리즘의 성능에도 영향을 끼칠 수 있습니다.

 

보조기억장치를 살펴볼게요

보조기억장치에서는 프로세서가 직접 접근할 수 없습니다.

그렇기 때문에 주기억장치로 거쳐서 접근해야 하는데요.

보통 게임을 할 때를 보시면 20GB의 용량이라고 할 때 메모리가 8G라면 어떻게 해야할까요?

이 때 우리는 가상메모리(Virtual Memory)라는 것을 사용합니다.

 

마지막으로 시스템 버스(System Bus)에 대해 살펴보겠습니다.

다양한 자원들, 주변장치, 리소스들이 같이 일을하려면 대화를 나누어야 하는데 이 통신을 하는 통로를 우리는 시스템버스라고 부릅니다. 즉, 하드웨어들이 데이터를 주고받는 물리적인 통로를 뜻합니다.

버스에도 종류가 3가지가 있습니다. 총 3가지가 있다는거 알고 계시면 좋을 것 같습니다.

 

728x90
반응형
Comments