폰 노이만 구조는 Stored Program 방식으로
구조는 위 그림과 같다.
폰 노이만 구조는 기본적으로 크게
1. The Central Processing Unit (CPU, Processor)
2. The Main Memory Unit (Memory)
3. The Input/Output Device (입출력 장치)
으로 구성 되어있다.
더 자세히 나타내보면 위와 같은 구조로 되어있다.
1-1. Arithmetic Logic Unit(ALU)
산술 및 논리연산장치(ALU)는 덧셈 및 뺄셈같은 산술연산,
논리곱(and) 논리합(or)과 같은 논리연산을
실행하는 장치이다.
1-2. Control Unit
제어장치(CU)는 메모리에 저장되어 있는 명령어(프로그램)을 fetch하여 해독한 후, 제어 신호를 발생시켜 하드웨어를 제어하는 장치이다.
1-3. Accumulator
ALU의 연산결과를 저장하는 일종의 레지스터이다.
1-4. Program Counter(PC)
CPU가 수행할 다음에 실행할 명령어가 저장되어 있는 메모리 주소 값을 기억하고 있는 레지스터이다.
1-5. Memory Address Register (MAR)
CPU가 fetch 하거나 store 할 메모리 블록의 주소를 일시적으로 저장한 레지스터이다.
1-6. Memory Data Register (MDR)
메모리에 읽거나 쓰려는 데이터 혹은 명령들을 일시적으로 저장하는 레지스터이다.
1-7. Instruction Register (IR)
CPU가 실행하기 위해 메모리에서 읽은 명령어를 기억하는 레지스터이다.
RAM, DRAM, Memory, Main Memory, 주기억장치 등으로 불린다.
휘발성이며, 프로그램(명령어들의 집합) 또는 데이터들을 저장하는 장치이다.
입출력(키보드, 모니터)등을 처리하기 위한 부분이다.
CPU의 처리속도보다 메모리의 속도가 느리거나 메모리에서 데이터나 명령어를 가져오는 속도가 너무 느릴때 발생한다.
참고자료
https://www.geeksforgeeks.org/computer-organization-von-neumann-architecture/
출처 : https://www.geeksforgeeks.org/levels-of-memory-in-operating-system/
컴퓨터는 data를 받아들여서 가공하고 원하는 결과를 내는 전자장치이다.
엄청난 정확성과 빠른 스피드를 이용해 수행한다.
다른 말로는 컴퓨터는 데이터를 input으로 받아들여
메모리에 데이터, 명령어들을 저장한다.
그리고 나서 그 데이터를 유용한 정보로 변환하고 가공을 하는것이다.
컴퓨터의 메모리는 인간의 뇌와 같다.
메모리는 데이터, 정보, 명령어들을 저장하는데 사용이 된다.
메모리의 종류는 여러가지가 있다.
위 사진에서도 볼수 있듯이 보다 효율적으로 사용하기 위해
메모리 계층구조를 두었다.
여기선 Main Memroy 에 관해서 살펴보겠다.
메인 메모리의 특성
1. secondary memory(HDD, SSD)에 비해서 속도가 빠르다.
2. 반도체로 구성된 메모리이다.
3. 휘발성 메모리이다.
4. 컴퓨터의 주 기억 장치이다.
5. 컴퓨터는 이 primary memory없이는 구동이 불가능하다.
프로그램 vs 프로세스
프로세스는 실행중인 프로그램을 의미한다.
우리가 C프로그램을 작성하고 컴파일 할때 컴파일러는 바이너리 코드를 만든다.
이때 바이너리 코드랑 c코드는 모두 프로그램이다.
우리가 바이너리 코드를 마침내 실행하면 프로세스가 된다.
출처 : https://www.geeksforgeeks.org/memory-layout-of-c-program/
https://www.geeksforgeeks.org/memory-layout-of-c-program/
그렇다면 프로세스는 메모리에 어떻게 할당될까?
Text Section
실행가능한 명령어들을 포함하고 있는 부분. Program Counter에 있는 값들을 나타낸 현재 활동중인 상태 값을 포함하고 있다. Code segment라고도 불린다. 보통 이부분은 공유될수>Initialized Data Segment:
주로 Data segment라고 불린다. 데이터 세그먼트는 virtual address space의 한 부분이다.
프로그래머에 의해 초기화된 전역변수와 static 변수들이 포함되어있다.
(java 전역변수 - iv, cv(static 붙은것))Uninitialized Data Segment:
주로 "bss" 세그먼트라고 불린다. 초기화 되지 않은 전역변수들이 들어있다. 프로그램 실행시작전에 커널이 0으로 초기화 해준다.Stack:
Stack 영역은 지역변수들이나 함수가 호출되면 할당되는 영역이다. 함수 종료시 반환된다.Heap:
Heap 영역은 객체가 생성시 할당되는 영역이다. 런타임시 동적으로 할당된다.
*참고
heap과 stack영역은 같은 공간을 사용한다. 운영체제마다 stack이 위에 있을수도 있고 stack이 밑으로 가있을수도 있다.
각 영역이 점점 비대해져서 상대방 영역을 침범하면 overflow가 발생된다.