눈송이의 개발생활
[운영체제]프로세스 메모리 구조 본문
프로그램과 프로세스
- 프로그램이 실행되면 프로세스는 각 메모리 공간을 시스템으로부터 할당 받음
- 프로그램의 실행
= 파일 시스템에 존재하던 실행 파일이 메모리에 적재
= 프로그램이 CPU를 할당받고 명령 수행하고 있는 상태
프로세스 메모리 영역 (= 가상 메모리)
Code
1️⃣- 프로그램에 내장된 코드 영역
- 수정 불가능한 기계어로 저장 (Read Only)
- 정적 영역
Data
2️⃣- 전역변수, static 변수 등(프로그램이 사용하는 데이터) 저장됨
- 정적인 특징 갖는 프로그램 종료되면 사라지는 변수다 저장된 영역
- 전역변수나 static 변수 참조한 코드는 컴파일 완료되면 data 영역의 주소값 가르킴
- 전역변수 변경 가능 (Read-Write)
- 정적 영역
- BSS 영역
- 초기화되지 않은 변수 0으로 초기화되어 저장됨
- RAM에 저장
- Data 영역
- 0이 아닌 다른 값으로 할당된 변수들 저장됨
- ROM(비휘발성 메모리)에 저장
- BSS 영역
Stack
3️⃣- 지역변수, 매개변수, 함수 저장됨
- 컴파일 시 크기 결정됨
- 함수를 재귀호출하면서 크기가 늘어날 수 있는데 Heap 영역과 겹치지 않기 위해 사이 공간을 비워놓음
- 재귀함수 반복적으로 호출되서나 변수가 메모리를 초과할 정도로 많이 가지면 stack overflow 발생
- 동적 영역
Heap
4️⃣- 동적 할당할 때 사용
- 프로그래머가 필요할 때마다 사용하는 메모리 영역
- 런타임 시 크기 결정됨
- 동적 영역
- JAVA
- 객체가 heap 영역에 생성되고 GC에 의해 정리됨
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제]프로세스 사이 통신 - IPC(Inter Process Communication) (0) | 2023.02.27 |
---|---|
[운영체제]PCB와 문맥 교환(Context Switching) (0) | 2023.02.27 |
[운영체제]인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2023.02.23 |
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) (0) | 2023.02.22 |
[운영체제]프로세스(Process)와 스레드(Thread) (0) | 2023.02.20 |
Comments