inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

그림으로 쉽게 배우는 운영체제

메모리관련 질문

해결된 질문

257

전우형

작성한 질문수 14

1

안녕하세요. 감자선생님!

메모리(+가상메모리)관련 질문있습니다.

 

Q1.메모리 할당방식 0:10 ~ 0:30

1) "당장 실행시켜야할 부분"이라면, Code영역 Data영역 데이터들로 추측되는데 대략적으로 맞을까요?

2) 해당 예시는 총 메모리보다 프로그램 크기가 큰 경우, 메모리오버레이 적용으로 이해했습니다.

그 반대의 상황 메모리(2GB) 게임(1GB)에서도 오버레이 적용 되는지 궁금합니다.

예상으로는 반대상황에서도 게임 실행 시, 1GB가아닌 훨씬 작은 메모리만 사용할것으로 추측중입니다.

 

Q2.가상메모리개요 1:45

1) 보라색 캐릭터(프로세스)의 데이터(Code,Data,Stack,Heap)들은

실제 형태는 RAM or ROM-스왑영역에 올라가 있는 상황으로 이해했습니다. 맞는지 궁금합니다.

 

Q3.디멘드페이징 0:25

메모리 Code 영역에는 작성한 코드가 기계어로 들어가있습니다.

1)저가 만약 5만줄의 코드를 작성하면, 5만줄에 해당하는 기계어 전체가 다 들어가있는 건지 궁금합니다.

2)Code영역에 비즈니스로직(프로그램의 시작과 끝 로직)도 '

Ram과 Rom으로 나뉘어져 실행되는 구조인지 궁금합니다.

ex)비즈니스로직에서

- A번쨰 줄 로직 : int 변수에 5를 더하기

- 그다음 줄 로직 : 위 변수 출력

이렇게 있는 상황에서 A번쨰줄 로직은 Ram에서 실행되고있고, 그 다음줄 로직은

Rom에 있으면 안될것같은 느낌이 확 들어 질문드립니다.(그 다음줄을 Rom에서 불러올 방법이 없습니다)

그렇게 되야 모든 로직이 실행되며 필요한 데이터는 Rom에서 불러오고 종료되고 할것같습니다.

 

이상입니다. 연휴잘보내세요!

운영체제

답변 1

1

감자

안녕하세요 전우형님!
바로 답변드리겠습니다.

Q1.메모리 할당방식 0:10 ~ 0:30

1) 당장실행시켜야할 부분이라면, Code영역 Data영역 데이터들로 추측되는데 대략적으로 맞을까요?
Code 영역, Data영역 뿐만 아니라 스택과 힙영역도 포함됩니다.

2) 해당 예시는 총 메모리보다 프로그램 크기가 큰 경우, 메모리오버레이 적용으로 이해했습니다.
그 반대의 상황 메모리(2GB) 게임(1GB)에서도 오버레이 적용 되는지 궁금합니다.
예상으로는 반대상황에서도 게임 실행 시, 1GB가아닌 훨씬 작은 메모리만 사용할것으로 추측중입니다.
실행시키는 프로그램(게임)의 크기가 작은 상황에서도 적용할 수 있습니다.
이때 얻을 수 있는 점은 일부만 메모리에 로드하기 때문에 속도가 빠르다는 것입니다!

Q2.가상메모리개요 1:45
1) 보라색 캐릭터(프로세스)의 경우 실제 데이터(Code,Data,Stack,Heap)들은
실제 형태는 RAM or ROM-스왑영역에 올라가 있는 상황으로 이해했습니다. 맞는지 궁금합니다.
RAM or 보조 저장장치(HDD, SSD)내 스왑영역에 저장됩니다. :)

Q3.디멘드페이징 0:25
메모리 Code 영역에는 작성한 코드가 기계어로 들어가있습니다.
1)저가 만약 5만줄의 코드를 작성하면, 5만줄에 해당하는 기계어 전체가 다 들어가있는 건지 궁금합니다.
디맨드 페이징에서 필요한 데이터뿐만 아니라 Code 영역도 필요한 부분만 올라오는지, 다 올라오는지가 궁금
하신 거라고 이해했습니다.
Code 영역도 전체가 올라오는 것이 아니라 일부만 올라옵니다.

 

2)Code영역 데이터에 비즈니스로직도 Ram과 Rom으로 나뉘어져 실행되는 구조인지 궁금합니다.
ex)비즈니스로직에서
- A번쨰 줄 로직 : int 변수에 5를 더하기
- 그다음 줄 로직 : 위 변수 출력
이렇게 있는 상황에서 A번쨰줄 로직은 Ram에서 실행되고있고, 그 다음줄 로직은
Rom에 있으면 안될것같은 느낌이 확 들어 질문드립니다.
그렇게 되야 모든 로직이 실행되며 필요한 데이터는 Rom에서 불러오고 종료되고 할것같습니다.
만약 int 변수가 A 번째 줄 다음 줄에서 실행될 때 보조저장장치(HDD, SSD)에 저장되어 있다면 메인메모리로 가져오는 데 시간이 오래 걸릴 겁니다.
다만 적절한 페이지교체 알고리즘으로 이미 메모리 올라와 있다면 속도가 조금 더 빠르겠죠?
만약 캐시에 저장되었다면 가져오는 속도는 더 빠를겁니다.
이런 이유로 페이지교체 알고리즘이 중요하다는 느낌이 확 오지 않나요? :)

 

우형님도 즐거운 연휴보내시길 바랍니다.
메리크리스마스~😊

0

전우형

와우! 선생님 답변감사합니다 ㅎㅎ

맨 마지막 질문(메모리 Code영역에 비즈니스 로직 관련) 한번만 더 드리고 싶습니다ㅠㅠ

저가 궁금한부분은 Code영역도 전체가아니라 일부가 올라오는것이라면

이런일은 발생 안하겠지만,

ex)

100번쨰 줄 : int a = 5;

101번쨰 줄: printf(a); //문법은 안맞추었습니다.

이렇게 텍스트 에디터에 작성하고, 컴파일을하면

기계어 파일에 줄 개념이 있는지는 모르겠지만, 순서대로 명령문들이 저장되고, 프로그램 실행시 처음 기계어 부터 실행되면서 순차적으로 다음 다음 기계어 연산하면서 흔히 프로그램이 동작한다(실행)가 되는것으로 이해하고있습니다.

 

위 상황을 기계어 조합으로 2 동작으로 묶어보았습니다.

1) a에 변수 5를 대입!

2)a를 출력!

 

이떄

1) 묶음 명령들이 Ram에서 실행

2) 만약에 2번 묶음의 기계어(출력!)들이 Rom에있다면 Ram에서는 1) 묶음을 다 연산하고

더 할게없으니 2)묶음은 실행안되야 되는게 맞는거 아닌지 궁금합니다.(출력이 안되는상황)

 

재정리: 100번째 줄 실행 후 [101번째 줄 통쨰 - a 를 출력!]도 결국 기계어로 어딘가 있을건데,

101번쨰 줄 통쨰로 다 Rom에 있으면 Ram에서 100번째 줄까지 연산하고

더 연산할게없는 상황(다음 명령문 기계어가없음)이지 않을까? 하는 질문입니다.

1

감자

실행할 데이터가 스왑영역에 있다면 필요할 때는 어쨋든 메인메모리로 올라와야합니다.
코드와 데이터들은 모듈 단위로 가져오기 때문에 라인별로 떨어져 있지 않겠지만 만약 101번째 줄만 스왑영역에 있다면 해당 코드는 메인메모리로 불러와서 실행해야겠죠? ㅎㅎ

0

전우형

답변 감사합니다. 선생님!

문득 떠오른게 있어 새질문으로 등록하겠습니다.

여러 의문점

1

63

1

CPU 스케줄링 RR 강의 2:54에서 질문 있습니다.

1

58

2

CPU Bound Process와 sleep, yield에 대해

1

62

1

커널과 인터페이스 개념

1

65

2

exit() 함수

0

155

2

LRU 관련 질문

1

182

2

고정 분할 방식도 연속 할당으로 알고 있는데 애니메이션이 다소 헷갈립니다.

0

115

2

Swapping, Manual Overlay, Dynamic Loading, Dynamic Linking의 개념이 헷갈립니다

0

147

2

각 메모리의 최대 요구 CPU 리소스는 어떻게 아나요?

1

167

2

PCB들이 연결리스트로 저장되는 이유가 뭔가요?

1

127

2

IPC 방식 중 매개체가 파일과 메모리일 때 할당되는 용량의 차이

0

118

2

고정 분할 방식에 질문입니다

0

120

2

세마포어에 관련해 질문입니다

1

144

2

IPC 통신 중 파일을 이용한 방법이 정확히 어떤 건가요?

0

152

1

공유자원과 동기화 문제에 관해서 질문이 있습니다.

0

153

2

FIFO 알고리즘에 대해서 질문이 있습니다.

1

128

2

멀티프로그래밍, 멀티 태스킹, 멀티 프로세싱

1

163

1

새로 올라온 영상에서 스와핑 언급이 빠졌는데

1

81

2

유니프로그래밍과 멀티프로세싱이 어떻게 공존할 수 있는 건가요?

3

173

2

인터럽트에 대해 질문 드립니다.

1

93

2

수업 노트 설명에 대해 이해가 안가는 부분이 있어 질문 드립니다.

0

116

2

3:59초에 대해서 궁금해요!

0

120

2

실무적으로 궁금한게 있습니다ㅠ

0

97

1

완강을 해보니 오히려 더 궁금한게 많아지네요

1

168

2