컴퓨터 구조와 운영체제의 흐름

Wonbin Lee·2022년 6월 20일
2

CS 공부...

요근래 CS공부를 하면서 컴퓨터 구조에 관해서 가장 기본적인 뼈대가 잡혀있지 않아 공부를 해도 이해하기 힘들고, 머리에도 잘 들어오지 않는 것을 느꼈다.
그래서 가장 기본적인 뼈대를 잡기위해서 컴퓨터의 기본흐름을 정리하기로 마음 먹게 되었다!!

구체적인 내용은 들어가지 않고 컴퓨터의 기본적인 흐름을 정리한 것이기 때문에 구체적이고 자세한 정보는 담고 있지 않다.

컴퓨터 구조

CPU

컴퓨터 안에는 크게 CPU, Memory, Disk, I/O 로 구성되어있다.

이것이 바로 아주 기본적인 컴퓨터 구조인데 '폰노이만' 구조라고도 한다.
CPU(Central Processing Unit)는 말그대로 컴퓨터의 중앙 처리 장치이며, 기억, 해석, 연산, 제어라는 4대 주요기능을 관할하는 장치이다. CPU는 편하게 말하면 계산을 하는 역할을 해준다고 보면된다.

CPU의 기본구성에는 레지스터, 프로그램 카운터, 명령어 레지스터, 산술논리연산장치(ALU: arithmetic logic unit), 제어부와 내부 버스 등이 있다. 그 외에도 캐시 메모리 같은 부가 장치도 들어가 있는 경우가 대다수이다.

이것 또한 쉽게 정리하자면 메모리에 있는 명령들이 쭉올라와서 CPU 안에서 ALU와 레지스터를 통해 연산을 하게된다.

Memory, Disk

메모리는 간단하게 말하면 임시 저장공간이고, Disk가 저장소가 되는것이다.

개발자들은 C, Java, C++ 코드를 통해 프로그램을 개발하게된다. 여기서 컴파일이라는 과정을 통해서 .exe, .dll과 같은 실행파일이 만들어지게 된다.

컴파일은 위에 있는 프로그래밍 언어들을 컴퓨터가 바로 이해 할 수 없기 떄문에, 컴퓨터가 읽을 수 있는 바이너리 파일로 바뀌어야 하는데 이 과정을 컴파일이라고한다.

단순하게 실행파일이 디스크에 하나 저장되어 있다고 생각해보자.

이 실행파일은 코드부와, 리소스로 구성되어 있다.
이게 무슨 이야기냐 하면, 이 개발자가 만들어놨을 어떠한 코드들의 기능들이 .exe 파일로 만들어질 떄 일부는 코드부고 일부는 리소스 즉 자원을 담고있다.

여기서 코드부의 일부분은 Memory로 올라가게 되고, 그때 필요한 리소스도 같이 참고할 수 있도록 메모리에 같이 올라간다.

Process

이렇게 해서 프로그램이 실행이 되었을 떄, 방금전에 메모리에 올라간 부분은 명령어들의 집합이라고 한다. 그 명령어들 중에서 일부 지금 처리하려고하는 명령어가 CPU에 올라가면 CPU는 그 명령어를 처리하게 된다.

이 때 조금전에 우리가 프로그램이라고 했던 .exe파일이 Memory에 올라가는 그 순간을 바로 Process라고 한다. 다시 말해서 프로그램이 실행되고 있는 것을 Process라고 하는 것이다.

이러한 Process 가 된 실행되고 있는 file들은 사실 컴퓨터에서 여러개가 존재한다.
무슨 말이냐면 컴퓨터에는 1개의 프로그램만 실행되고 있는게 아니라, 우리가 띄우고 있는 프로그램 들을 동시에 실행하고 있다는 뜻이다. (ex. 게임켜놓고 웹서핑)

하지만 위에서 '동시에'라는 표현을 썼지만, 사실상 엄밀히 말하면 '동시에'라는 표현을 맞지않다.
프로세서가 하나라고 가정했을 경우, 즉 멀티코어가 아닌 CPU 코어가 하나라고 가정 했을 경우, 프로세서(CPU)는 프로세스 들에게 한번씩 기회를 주는 것이다.

엄청나게 많은 프로세스가 있지만, 결국 이 하나의 프로세서(CPU) 1개의 명령만 처리가 되고 있다고 보면된다.

CPU Scheduling

방금처럼 실행되고 있는 프로세스 들이 여러개 있다고 했을떄, 이 프로세스들은 특정시간만큼의 배정을 받게된다.
즉 각각의 프로세스들은 시분할을 통해 일부가 계속 실행되는 것이다. 그것이 매우 빠른 속도로 이루어지기 때문에, 우리는 동시에 실행되고 있다고 착각 할 수가 있다.

여기서 각 프로세스들에게 얼마만큼의 시간을 배정할 지, 그리고 이 프로세스들 중에서 어떤것을 먼저 실행할 지 이런것 들에대한 관리를 하게되는데, 이것을 CPU Scheduling이라고 한다.

CPU 스케쥴링을 하는 방식은 다양한데, 대표적인 스케쥴링은 OS 중에선 Window가 그리고 살아남은 많은 OS들의 대표적인 스케쥴링인 선점형(Preemptive) 스케쥴링이다.
선점형 스케쥴링은 프로세스중에서 우선순위가 높은 프로세스가 먼저 CPU를 차지하는 방식이다.

그밖에도 먼저 온 놈 먼저 서비스인 FCFS(First-Come, First-Served) 방식과 실행시간이 짧은놈 먼저 서비스하는 SJF(Shortest-Job-First) 도 있다.

메모리 관리

메모리는 저장공간에 대한 관리가 핵심이다. 왜냐하면 디스크 쪽 으로 갈수록 저장공간에 대한 코스트는 낮아지지만, CPU쪽으로 갈 수록 높아진다. 즉 비싸진다는 이야기이다.

메모리또한 상당히 고비용의 장치인데, 따라서 프로그램의 모든 데이터를 메모리에 한꺼번에 다 올릴 수 없다. 그렇기 때문에 일부분은 메모리에 올라가게 되고, 또 일부분은 다시 디스크로 내려가게 된다.

또한 한개의 프로그램만 실행되고 있지 않기 때문에, 어떤 프로세스의 어떤 데이터들을 적재시킬 지 가 관리 대상이 된다.
그것이 '메모리관리 교체 알고리즘'이고, 이러한 것들이 주로메모리에 처리되는 일이다.

디스크 관리

디스크 관리는 디스크를 얼마나 빠른속도로 파일을 엑세스할 것인가 하는 부분을 말한다.

OS

방금 말했던 CPU의 스케쥴링, 메모리 관리 그리고 디스크를 관리하는 것이 바로 운영체제(OS) 인것이다.

운영체제가 하는 일은 이러한 하드웨어들을 잘 동작할 수 있게 하는역할, 그리고 여러가지 프로그램들이 동시에 최적의 성능을 낼 수 있게끔 메모리나 CPU를 사용해서 프로그램 구동을 관리하는 역할을 해주는 것이다.

profile
Developer who level up every day ✌️

0개의 댓글