메모리관련 질문
안녕하세요. 감자선생님!
메모리(+가상메모리)관련 질문있습니다.
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번째 줄만 스왑영역에 있다면 해당 코드는 메인메모리로 불러와서 실행해야겠죠? ㅎㅎ
여러 의문점
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





