1. 프로그램의 실행
- 의미 - 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미
- 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태 - 파일 시스템에 있는 실행 파일이 메모리에 적재될떄, 실행 파일 전체가 메모리에 올라가지 않음
▶ 일부만 메모리에 올라가고 나머지는 디스크의 특정영역인 스왑 영역에 존재
2. 메모리구조
- 운영체제(OS)의 메모리구조
1. 커널 영역 : kernel은 운영체제의 핵심. 커널영역은 system call을 통해 커널모드로 전화해야 접근가능
2. 유저 영역 : Code, Data, Stack, Heap 4가지로 구성 → 가상메모리 - OS Kerner Space : 드라이버 설치
- Stack : 지역변수, 매개변수
메모리의 높은 주소에서 낮은 방향으로 할당 - Free : 여유공간
- Heap : 동적 메모리(new)
메모리의 낮은 주소에서 높은 방향으로 할당 → Stack, Heap영역이 넘쳐서 서로 만나면 스택 오버플로 현상이 발생 - BSS : 초기화되지 않은 변수
- Data : 전역변수, static변수
- Code(Text) : 상수, 코드
2-1. Code(Text) 영역
- 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행 할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간
- 컴파일타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only로 되어있음
- 프로그램의 시작부터 종료까지 메모리에 계속 남아 있음
2-2. Data영역
- 전역변수 또는 static변수 등 프로그램이 사용하는 데이터를 저장하는 공간
- 전역변수 또는 static값을 참조한 코드는 컴파일이 완료되면 data영역의 주소값을 가르키도록 바뀜
→ 전역변수의 변경 가능성이 있어 Read-Write - 프로그램 시작과 함께 할당되고, 프로그램이 종료되면 소멸
2-3. Heap 영역
- 프로그래머가 직접 공간을 할당, 해제하는 공간 → 런타임에 결정
▶ 메모리 할당 : malloc() 또는 new연산자 이용
▶ 메모리 해제 : free() 또는 delete 연산자 이용
2-4. Stack영역
- 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)을 임시로 저장
→ 호출완료되면 사라짐 - 프로그램이 자동으로 사용하는 임시 메모리 영역
3. 오버플로우
- 할당 가능한 메모리 영역을 넘어설 때 발생하는 오류
▶ 이러한 특성을 이용해 해킹공격의 가능성↑ - 종류
▶ 힙 오버플로우 : 힙이 스택을 침범하는 경우
▶ 스택 오버플로우 : 스택이 힙을 침범하는 경우, 오버플로우 중 가장 많이 발생
참고)
[개발상식] #7. 메모리 구조 :: 개발일기🌷 (tistory.com)
[개발상식] #7. 메모리 구조
1. 메모리 구조(Memory Structure) 운영체제(Operating System)의 메모리 구조 → 커널영역 : kernel 은 운영체제의 핵심, 커널영역은 system call을 통해 커널모드로 전환해야만 접근 가능 → 유저영역 : Code, Data
beatitudo31.tistory.com
[CS 지식] 메모리 구조 :: 코딩 공부 일지 (tistory.com)
[CS 지식] 메모리 구조
프로그램이 실행되기 위해서는 프로그램이 메모리에 load 되어야 하며 프로그램에서 사용될 변수들을 저장할 메모리도 필요하다. OS Kerner Space : 드라이버 설치 Stack : 지역변수, 매개변수 Free
cocoon1787.tistory.com
https://gabrieletolomei.wordpress.com/miscellanea/operating-systems/in-memory-layout
In-Memory Layout of a Program (Process)
In this post, I will try to explain how a program is actually laid out in main memory for being executed. Here, I am assuming the program to be run on a multitasking Linux OS hosted on a 32-bit x86…
gabrieletolomei.wordpress.com
[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) (tistory.com)
[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)
프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP
zangzangs.tistory.com
'CS지식 > 개발 상식' 카테고리의 다른 글
[CS지식 - 개발상식] HTTP 메소드 (0) | 2023.01.23 |
---|---|
[CS 지식 - 개발 상식] 프레임워크 vs 라이브러리 (0) | 2023.01.15 |
[CS 지식 - 개발 상식] Ajax & axios & fetch (0) | 2023.01.12 |
[CS 지식 - 개발 상식] Web Server와 WAS의 차이 (0) | 2023.01.12 |
[CS 지식 - 개발상식] TDD의미 및 장점 (0) | 2023.01.11 |