C unmanaged

컴퓨터의 작동 원리

느억맘 2021. 5. 14. 16:19

ROM BIOS - ROM 인걸로 보아 읽기만 가능하고 쓸수는 없다. BIOS의 약자가 Basic Input Output System

 

인걸로 보아 말그대로 기본 입출력을 위한 시스템이라고 볼 수 있을듯?

 

CPU는 직접적으로 보조기억장치에 접근할 수 없음. 오로지 주기억장치(RAM)에만 상호작용함.

 

운영체제(OS)는 보조기억장치에 저장됨.

 

그렇다면 CPU는 어떻게 운영체제를 불러올 수 있는것인가?

 

보조기억장치에 저장된 운영체제에서 CPU가 읽어드릴 운영체제 정보를 RAM으로 복사해서 읽는방식임.

 

운영체제 뿐만아니라 그외 프로그램도 다 이런 똑같은 방식일걸로 보인다...

 

 

시스템 프로그램 - 컴퓨터 바탕화면을 바꿀때 사용하는 프로그램같은 운영체제의 핵심 프로그램이라고 하기에는

 

뭐한 그런 프로그램들????

 

응용 프로그램 - 그 외의 우리가 사용하는 웹서핑 브라우저나 포토샵, 유니티 같은 모든 프로그램들

 

커널 - 운영체제의 핵심 프로그램 하드웨어와 응용 프로그램(application)을 연결해주는 역할을 한다.

 

응용프로그램을 한번에 여러개 사용할때

 

이 역시 운영체제에서 어떤 응용프로그램에 리소스를 더 할당할지 결정한다.

 

내장형 프로그램 방식의 컴퓨터((폰 노이만 구조)

원래 프로그램을 천공카드 등에 적어서 넣는 방식이었는데 메모리에 저장하는 방식으로 바뀜.

 

알아야 할점은 중앙 프로세서와 메모리는 따로 분리되어있다는 사실.

 

저 Bus 들은 컴퓨터의 데이터들(2진수로 이루어진 정보들)의 통로라고 보면된다.

 

Control bus 는 컨트롤 정보들이 담긴 데이터들이 이동하는 통로

 

Address bus 는 주소 정보들이 이동하는 통로

 

Data bus 는 데이터 정보들이 이동하는 통로

 

또 알수 있는게 CPU와 메모리는 버스를 통해 상호작용을 한다는점(직접 x)

 

I/O 부분은 운영체제가 알아서 관리해주기 때문에 프로그래머는 CPU와 메모리 부분만 집중해주면 된다

 

 

CPU  - Cache Memory - Random Access Memory

 

자주 쓰는 데이터는 캐시메모리에 저장해 사용함

 

순차 접근은 말그대로 메모리에 있는 데이터에 접근할때 순차적으로 접근하는 방식임.

 

옛날 마그네틱 방식 사용할때나 쓰던거라 어느 지점에 있는 데이터 찾으려면 일일히 처음부터 찾아야함.

 

임의 접근은 현재 메모리가 사용하는 방식인데 데이터가 어디에 저장되있든 바로 찾아갈 수 있음.

 

RAM의 구조

빨간색으로 표시한 부분이 보다시피 트렌지스터와 캐패시터인데 저 한묶음을 셀이라 부르고

 

저 한묶음이 1byte를 저장함. 저게 수도없이 많은게 모인게 집적회로임.

 

CPU의 작동원리

CPU가 주소를 메모리에서 가져올때

 

→ Control Bus 를 통해서 RAM에게 신호를 전달함. 데이터 주라고

 

→ address bus 를 통해 가져올 데이터가 있는 주소데이터 정보를 RAM에게 보냄

 

→ RAM은 그 주소데이터 정보를 보고 그 주소데이터에 있는 데이터를 data bus를 통해 CPU에게 보냄.

 

CPU가 주소를 메모리에 저장할때

 

→control bus를 통해서 RAM에게 신호를 전달함. 데이터 저장한다고.

 

→ address bus를 통해 RAM에 데이터를 저장할 주소데이터를 RAM에 보냄

 

→ RAM은 address bus를 통해 받은 주소데이터에 data bus를 통해 받은 데이터를 저장함.

 

※ data bus와 control bus 는 양방향 데이터 통신이지만 address bus는 CPU에서 RAM으로만 통한다.(그냥뭐 일방통행)

 

저 address bus 부분을 포인터라고 하는데 저 포인터를 다루는 C/C++ 가 다른 언어보다 속도가 훨씬 빠르다.

 

내가 프로그램을 만들면 그 프로그램은 보조기억장치에 저장되고 이 프로그램을 사용하고자 하면 주기억장치로 사본을 복사해 실행하는 방법 뿐이다.

 

고수준 → 어셈블리 → 기계어

 

현대에 추가된 CPU 명령어들은 다 위의 기본 명령어에서 조합을 한것임

 

CPU의 구성 - 제어장치 ALU 여러가지 레지스터들(하나만 있는거 아님) 요 3가지로 구성되어있음

제어 장치 - 

 

ALU - 실질적으로 논리연산을 담당하는 곳

 

레지스터 - 표에있는 레지스터가 대표적인 레지스터 종류들. 보다시피 데이터나 명령어를 저장하는 기능을함. (메모리와 비슷하나 틀림)

 

프로그램이 시작될때 일어나는 현상 즉 보조기억장치 → 메모리로 프로그램이 이동하기 전임 데이터 초기값은 무조건 0이라는 보장X
프로그램이 시작될때 일어나는 현상 즉 보조기억장치 → 메모리로 이동한 후의 상태임 아래 어셈블리가 프로그램을 저장 위는 프로그램이 사용할 데이터 저장

OS가 프로그램을 메모리에 저장해주고 프로그램의 시작주소가 100이라는것을 CPU에게 알려준다. (즉 주소100부터 실행하라는말)

 

변수 A 선언 - 주소 10번지를 A라고 부름 여기에 데이터 3 저장

 

변수 B 선언 - 주소 11번지를 B라고 부름 여기에 데이터 4 저장

 

변수 C 선언 - 주소 12번지를 C라고 부름 여기에 데이터 저장

 

LOAD [10] - 주소가 10인 데이터 불러옴

 

ADD [11] - 불러온 데이터와 주소가 11번지인 데이터를 더함

 

STORE [12] - 연산된 값을 주소12번지에 저장 그래서 변수 C의 주소가 12번지인것임

 

 

CPU의 연산과정

제어장치 - 프로그램 카운터, 명령어 레지스터, 메모리 주소 레지스터, 메모리 데이터 레지스터를 주관

 

ALU - Accumulator 를 주관 (레지스터임)

 

Program Counter는 [다음번에 실행될 명령어의 주소를 저장하는 레지스터] 이다.

 

다음번에 실행될 명령어는 LOAD 10 이므로 이 명령어의 주소 100이 PC에 저장된다.(위에서 이미 기준점을 제시)

OS가 프로그램을 메모리에 저장해주고 프로그램의 시작주소가 100이라는것을 CPU에게 알려준다. (즉 주소100부터 실행하라는말)

프로그램 카운터의 주소를 주소를 저장하는 메모리 주소 레지스터에 저장한다.

메모리 주소 레지스터에 접근하여 주소데이터 100을 가져온뒤 이 주소데이터 100에 있는 데이터 LOAD 10을

 

데이터 레지스터에 저장한다. 이러한 과정은 모두 제어 장치에 의해 이루어지는것임.

가져온 데이터가 명령어 이므로 명령어 레지스터에 저장이 된다.

PC가 1 증가함. 아직 명령어가 실행되기 전인데 왜 오른건지는 잘 모르겠다. ㅠ

명령어 레지스터에 저장되어있는 명령어가 제어 장치로가 디코드(해독) 된다. 즉 뭘해야할지 해독하는과정임.

LOAD 10 이 10번지에 있는 데이터를 가져오라 라는것이 확인되었으므로 일단 주소 레지스터에 10번지 저장

10번지에 가서 메모리에 있는 데이터 3을 가져와 데이터 레지스터에 저장

데이터 레지스터에서 어큐뮬레이터로 데이터 복사 어짜피 데이터를 가져왔다라는 뜻은 연산에 사용할거기때문에

다음 명령어를 가져오기 위해 일단 프로그램 카운터에 저장된 주소지를 주소 레지스터에 저장함

주소 레지스터에 저장된 주소지의 데이터를 찾아서 데이터 레지스터에 저장

가져온 데이터가 명령어이므로 명령어 레지스터로 가고

마찬가지로 똑같이 프로그램 카운터의 값이 1증가

명령어 레지스터에 있는 명령어가 제어 장치로가 똑같이 디코드됨.

11번지의 데이터와 저장하기 위해선 저장할 또다른 데이터가 필요하다. 컴퓨터는 앞에서 읽은 데이터와의 연산을 함.

 

연산을 위해 어큐뮬레이터에 있는 데이터가 ALU로 이동함

ADD명령어를 실행하기 위한 주소를 찾아가기 위해 주소 레지스터에 11번지 저장

11번지에서 읽어들인 데이터를 데이터 레지스터에 저장

산술논리연산에 사용할것이므로 어큐뮬레이터에 저장

ALU에서 연산

연산된 값이 어큐뮬레이터로 이동

다음 명령어를 실행하기 위해 PC의 주소값이 주소 레지스터에 저장

주소 레지스터에 있는 주소 값에 있는 데이터를 가져와 데이터 레지스터에 저장

데이터가 명령어이므로 명령어 레지스터에 저장

PC가 전과같이 1오르는데 103의 경우 명령어 데이터가 아니므로 프로그램이 종료될거임.

명령어 레지스터에 있는 명령어는 제어장치로 가서 디코드됨.

주소를 찾기위해 주소 레지스터에 명령어의 주소값 저장

명령어 특성상 데이터를 가져오는것이아닌 저장하는 것이므로 어큐뮬레이터에 있던 값이 데이터 레지스터에 저장됨.

12번지로 가서 데이터 저장

'C unmanaged' 카테고리의 다른 글

getchar() 버퍼 비우는법  (0) 2021.06.15
printf() 작동원리  (0) 2021.06.02
형식 지정자에 따른 오버, 언더플로우  (0) 2021.05.28