-
[ 운영체제 ] 4. 메모리 구조 , PC , SPCS/운영체제 2021. 9. 23. 12:49
메모리 구조
- 프로세스 생성되어 프로그램이 메모리위에 올라가면 다음과 같은 메모리 구조 를 가지게 됩니다.
- UNIX 시스템은 실행중인 프로세스에게 4GB 의 가상메모리 를 할당합니다
- Code , Data ,Bss 영역은 컴파일 시 크기가 결정되고 Heap , Stack 영역은 런타임시 크기가 결정됩니다.
1. TEXT (CODE) Segment
프로그램 실행시 가장 먼저 구성을 이루게 되는 곳으로 프로그램의 코드들이 CPU가 바로 이해할수 있는 (처리할 수 있는 ) 바이너리화 된 바이너리 코드가 저장되는 곳이다.
2. DATA Segment
data segment 에는 전역 변수가 올라가게 되고 더 상세히 나누면 DATA 부분과 BSS 부분으로 나뉘는데 각각 초기화 되지 않은 전역 변수 , 초기화된 전역 변수가 올라가는 곳이다.
3. HEAP Segment
프로그래머가 직접 공간을 할당 ,해제하는 공간이다.
동적으로 데이터를 생성하면 그 크기 만큼 heap에 공간이 할당되고 그 안에 값이 실제로 저장되어진다.선입선출 방식을 따른다.
4. STACK Segment
스택의 자료구조를 사용하고 있으며 LIFO 의 규칙을 따른다. 함수 호출시 생성되는 지역변수 , 매개변수 등이 저장된다 . 해당 데이터들은 임시 자료로서 함수가 끝나는 시점에 LIFO 의 규칙에 맞게 순서대로 사라진다.
stack 과 heap 은 데이터가 지워지고 생성됨을 반복하기 때문에 데이터 용량이 가변적입니다. 그렇기 때문에 Stack 은 밑으로 채워내려가고 Heap 은 아래에서부터 쌓아 올려 갑니다. 이렇게 주소값을 채워 나가다가 Heap 이 Stack 방향으로 영역을 침범하는 경우 Heap Overflow 라고 하고 반대의 경우는 그 유명한 Stack Overflow 라고 합니다.
PC(ProgramCounter) / SP (StackPointer)
위와같은 메모리 구조와에서 CPU 가 어떻게 일을 하는지를 간략하게만 알아보겠습니다.
그 핵심은 PC 와 SP 라는 CPU 레지스터 입니다. PC 에는 현재실행할 CODE 영역의 각줄에 대한 주소값이 저장되어 CPU 는 PC 에 기록된 주소값을 단순히 연산하게됩니다.
다음으로 SP에는 가장 최근에 올라간 Stack data 의 주소값이 저장되어 삽입과 삭제시 LIFO 를 따라 동작하게 됩니다.
'CS > 운영체제' 카테고리의 다른 글
[ 운영체제 ] 6. 가상메모리 와 페이징 (0) 2021.10.03 [ 운영체제 ] 5. 스레드 와 프로세스 (0) 2021.09.28 [운영체제 ] 3. 인터럽트 , 컨텍스트 스위칭 (0) 2021.09.20 [운영체제 ] 2. 프로세스 상태와 스케줄링 알고리즘 (0) 2021.09.18 [운영체제 ] 1. 운영체제 구조 - 커널 , 시스템 콜 , 쉘 , API (0) 2021.09.18