CS/OS

👊프로세스 주소 공간

ಠಿ_ಠ 💻 2021. 6. 12. 02:23

OS 공부의 시작으로 프로세스 주소 공간을 공부하겠다!

혹시 잘못된 부분이 있다면 알려주세요! 저로 인해 잘못된 내용을 공부하게 되는 것을 원하지 않습니다😥

프로그램 vs 프로세스 vs 스레드

항상 프로세스를 공부할 때면, 먼저 프로그램 /프로세스/ 스레드를 비교해서 정의해놓고 시작한다.

개념을 확실히 하고 넘어가보자.

 

프로그램?

실행가능한 파일, 어떤 동작을 하기 위해 작성된 지시사항들의 집합을 포함

Chrome.exe, Kakao.exe 같은 것이다. Primary memory가 아니라 Secondary memory에 저장된다. Primary memory에 로드되어 커널에 의해 실행된다.

 

프로세스?

실행중인 프로그램 인스턴스, OS가 프로그램을 메모리에 올려 실행시킴

Chrome.exe를 더블 클릭해서 실행시킨 것을 프로세스라고 한다. 윈도우 작업관리자에서 실행중인 프로세스를 볼 수 있다.

 

스레드?

프로세스의 가장 작은 실행 단위, OS가 프로세스를 만들고 메인 스레드를 실행함

프로세스는 최소 1개의 스레드를 갖는데, 메인 스레드라고 한다.

 

이해안되는게 굉장히 많을 수 있다. 하지만 여기선 프로세스 메모리 구조에 대해서 공부하는게 목표!임을 잊지 말고 넘어가버리자. 어차피 뒤에서 계속 나온다.

 

프로세스 메모리 구조

프로세스 메모리 구조는 코드, 데이터, 힙, 스택 4개의 영역으로 이루어져 있다. 하나씩 어떤게 담기는지와 그 특징에 대해서 알아보겠다. 위 사진을 통해 간단히 확인할 수 있다.

 

- 코드

데이터 종류 특징
프로세스가 실행할 코드가 기계어로 번역되어 저장됨 - 프로그램의 시작부터 끝까지 메모리에 남음
- Read-Only로 중간에 바꿀 수 X

- 데이터

데이터 영역은 또 2가지로 나누어 볼 수 있다. Data와 BSS 영역이다.

영역 데이터 종류 특징
Data 영역 초기화된 전역 변수, static 변수 - 프로그램의 시작과 함께 할당되어, 프로그램 종료시 소멸 
- Read-Write
BSS 영역 초기화되지 않은 전역 변수

+ 궁금해진 내용 .. 왜 이렇게 2개의 영역으로 나누었을까?

초기화된 변수는 초기값을 저장해야해서 ROM에 저장된다. 초기화하지 않은 데이터까지 ROM에 저장하면 필요한 ROM의 크기가 커져 비용이 많이 들게 된다. 따라서, 초기화되지 않은 데이터는 RAM에 저장하도록 한다.

 

+ 그럼 초기화되지 않은 전역변수로 선언하는게 더 빠를까?....그냥 재밌어보이는 글이라서 추가함~!!

https://kldp.org/node/122255

 

데이터 영역과 .bss 영역의 차이 | KLDP

전역변수나 static 변수를 선언할 때 초기값이 있으면 데이터 영역에 할당되고 초기값이 없으면 .bss 영역에 할당된다고 알고 있습니다 그러나 .bss 영역에 할당되는 변수도 어차피 (쓰레기 값이 아

kldp.org

RAM이 읽는 속도가 더 빨라서 더 빠를 것 같다. (100퍼 뇌피셜!!!!)

 

- 힙

데이터 종류 특징
C에서 malloc, Java에서 new/ 배열/ class 객체 같이 동적으로 할당되는 것들이 저장됨 - C와 같은 경우, 사용한 메모리 영역 해제 필요 (안하면 Memory Leak 발생, Java는 GC에 의해 해제됨)
- 런타임시 크기가 결정됨

- 스택

데이터 종류 특징
함수의 호출과 관계되는 지역 변수와 매개 변수가 저장됨 - LIFO 방식에 따라 동작되는 구조
- 컴파일 타임에 크기가 결정됨 (무한히 할당 X - StackOverFlow)
- 사용하고 소멸되는 것이 반복되어 메모리 용량이 불확실
=> Stack은 아래부터 채워 올리고, Heap은 위에서 부터 채움

+ 스택과 힙은 같은 공간을 사용한다.이때 메모리를 채우다가 Heap에서 Stack 영역 침범 => HeapOverFlow, Stack에서 Heap 영역 침범 => StackOverFlow

 

🧨스택이 컴파일 타임에 크기가 결정된다는게 뭔소리야~!

아 스택은 고정된 크기를 갖는다고 한다. 아닌가?!??? 맞는거 같은뎅,,, 다시보겠다,,ㅠㅠ

https://unix.stackexchange.com/questions/127602/default-stack-size-for-pthreads

 

Default stack size for pthreads

As I understand, the default stack size for a pthread on Linux is 16K. I am getting strange results on my 64-bit Ubuntu install. $ ulimit -s 8192 Also: pthread_attr_init(&attr);

unix.stackexchange.com

 

🧨 왜 이렇게 메모리 구조를 나누었을까?

Segmentation의 모습이다. 나중에 자세히 하겠지만, 공유와 보호가 장점이다. 관련 글은 다음에 작성하겠다!

 

https://study.com/academy/lesson/memory-segmentation-definition-purpose.html

 

Memory Segmentation: Definition & Purpose | Study.com

In this lesson we will learn and understand the definition and concepts in memory segmentation. We will examine the processes entailed and...

study.com

 

알아야할 KEY WORD- 컴파일 vs 런타임

컴파일 = 코드 -> 기계어

런타임 = 컴파일을 마치고, 프로그램이 동작되어지는 때

 

출처

https://en.wikipedia.org/wiki/Process_(computing) 

 

Process (computing) - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Particular execution of a computer program In computing, a process is the instance of a computer program that is being executed by one or many threads. It contains the program code and

en.wikipedia.org

https://javaconceptoftheday.com/differences-between-program-vs-process-vs-threads/

 

Differences Between Program Vs Process vs Threads

What are the differences between Program Vs Process vs Threads? operating system interview questions, program vs process, process vs threads in java. . .

javaconceptoftheday.com

https://coding-lks.tistory.com/118

 

[get_next_line] 메모리 구조

메모리의 구조 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 따라서 컴퓨터의 운영

coding-lks.tistory.com

http://www.tcpschool.com/c/c_memory_structure

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

https://velog.io/@underlier12/OS-14-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B5%AC%EC%A1%B0

 

OS #14 프로세스 구조1

프로세스는 다음과 같이 4가지 영역으로 나눌 수 있다.text(code) : 일반 코드가 존재data : 변수/초기화된 데이터가 존재stack : 임시 데이터(함수 호출, 로컬 변수 등)이 존재heap : 코드에서 동적으로

velog.io

https://velog.io/@goserimgoserimgo/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0

 

메모리 구조

운영체제는 프로그램의 정보를 읽어 메인 메모리에 공간을 할당해 로드한다. 이 메모리의 구조를 알아봅시다 ^_^..

velog.io

 

'CS > OS' 카테고리의 다른 글

📌프로세스와 스레드  (0) 2021.06.12