강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

오류님의 프로필 이미지
오류

작성한 질문수

Windows System 프로그래밍

02_Memory_virtual_address

프로세스와 가상메모리의 주소 위치와 테이블 매핑

해결된 질문

작성

·

25

0

1.전시간에 프로세스가 구조체라고 한게 C언어의 문법 struct와 관련이 있나요?

2.제가 현재 이해한 건 프로그램을 실행시키면 물리 메모리에 적재되는데 물리 메모리가 부족하면 안 쓰는 데이터들을 HDD에 페이지에 올리고 필요해지면 다시 물리 메모리에 올리는 식으로 이해 했는데 여기서 하드에 있는 페이지는 물리 주소랑 매핑 안되어 있고, 나중에 쓸 때 매핑 되는 거죠? 그러면 물리 페이지와 논리 페이지 둘다 램에 있는 건가요? 그중에서 하드에 있는 것도 논리 페이지면 매핑이 되야 될텐데 하드에 있는 것까지 매핑되면 물리메모리가 부족한 문제는 해결 안될 거 같아서 살짝 이해가 안되네요.
3.2번에서 나오긴 했지만 가상메모리의 저장위치가 램과 하드가 맞나요?

답변 3

1

megayuchi님의 프로필 이미지
megayuchi
지식공유자

  1. 네 C언어의 문법 struct입니다. 실제로 OS의 프로세스 정보 블럭은 C언어의 struct로 구현됩니다. OS는 C로 작성되었고 프로세스의 각종 정보들이 struct로 선언된 자료구조에 담겨 있습니다.

  2. 시스템 메모리에 있는 데이터라도 물리메모리와 1:1 맵핑 되지는 않습니다. 심지어 OS의 커널에서도 물리 메모리 주소를 직접 억세스하진 않습니다. os가 최초 부팅할 때 가상 메모리 억세스를 위한 메모리 페이지 테이블을 먼저 구성합니다.이것은 CPU의 MMU라 하는 기능을 사용합니다. 물리 메모리에 있는 데이터든, 디스크 장치로 페이지아웃된 데이터든 '가상주소 -> 물리주소'변환을 통해 억세스 됩니다. os에서 할당된 모든 메모리는 '가상주소'를 가지는 페이지입니다. 여기서 물리 페이지라고 하면 '가상주소'는 당연히 가지고 있고 해당 가상 주소가 '물리 메모리'에 맵핑되어있는 페이지입니다. 즉 '가상주소:물리메모리주소' 또는 '가상주소:물리메모리주소없음(디스크 페이지아웃 상태)' 이렇게 두 가지 상태를 가지는 것입니다.

    1. '가상주소만 가지고 있고 물리메모리에 맵핑되지 않은 페이지는 저장소(하드or ssd)에 존재하게 되됩니다.

    2. 이 주소에 대해 억세스 하려고 하면 페이지 엔트리에 페이지아웃되었다는 표시가 있기 때문에 page fault라고 하는 인터럽트가 발생하게 됩니다.

    3. 이에 대한 인터럽트 핸들러도 미리 설정되어있으므로 page fault발생시 해당 가상주소에 대해 물리메모리를 맵핑하고 그제서야 실제로 가상주소의 메모리를 읽고 쓰게 됩니다.

    4. page fault가 발생한 페이지를 물리 메모리에 맵핑하려 하는데 만약 물리메모리가 충분치 못하다면 억세스가 빈도가 낮고 억세스된지 오랜 시간이 지난 다른 페이지를 선택헤서 '가상주소:물리주소없음' 상태로 바꾸고 그 페이지가 사용하던 물리 주소를 회수해서 page fault된 페이지에 할당합니다. 이것이 흔히 말하는 페이지 swap입니다.

       

  3. 가상 메모리 주소는 페이지테이블이라는 자료구조로 저장됩니다. 이것은 하드가 아닌 물리 메모리에 저장됩니다. 이것은 페이지아웃 될 수 없습니다. 반드시 물리 메모리에 위치해야합니다. 이 정보는 cpu동작과 직접적으로 연관되며 mov명령등 메모리를 읽고 쓸때 cpu의 mmu에 의해 직접 억세스 됩니다. 디스크장치에 저장되는 데이터는 페이지테이블 같은 필수 커널 데이터가 아닌, OS의 메모리매니저에 의해 할당되는 (유저모드 프로그래머가 malloc()으로 할당하는) 페이지 들입니다.

     

0

오류님의 프로필 이미지
오류
질문자

아 설마 가상 페이지에 저장되는 건 가상 주소 정보고(실제 데이터 x), 그걸 통해 물리메모리에 접근 하는 건가요? 그리고 논리 페이지와 매핑되는 물리메모리는 RAM에 올라온 페이지 이외에 안쓰는 페이지는 하드에 등록인 거 같은데 그러면 이 가상 메모리 속성은 램에 저장되는 건가요?

megayuchi님의 프로필 이미지
megayuchi
지식공유자

  1. OS의 메모리 매니저로부터 할당되는 모든 메모리는 가상페이지 입니다.가

     

  2. 가상주소에 대한 정보는 페이지 테이블 등으로 부르며 커널의 핵심 데이터로 따로 관리됩니다.

  3. 각각 가상메모리 페이지의 속성은 페이지엔트리라는 4 또는 8바이트 데이터로 페이지 테이블에 저장됩니다. 얘네들은 페이지가 아니고 별도의 테이블이라 부릅니다.

  4.  

 

0

안녕하세요, 인프런 AI 인턴입니다. 오류님.

질문해 주신 내용은 메모리 관리에 관련된 중요한 개념들이라 조금 어려울 수 있습니다. 각 질문에 대해 하나씩 설명드리겠습니다.

1. 프로세스가 구조체라고 한 부분과 C 언어의 관계

프로세스를 “구조체”라고 말한 것은 C 언어의 struct와 바로 연관지어 생각하기보다는, 프로세스를 하나의 논리적 구조로서 설명하는 데 유용한 비유라고 생각하시면 됩니다. 프로세스는 운영 체제에서 특정 프로그램 실행 시 필요한 정보(예: 메모리, 스케줄링, 자원 소유 등)를 관리하는 논리적 단위입니다. C 언어 struct처럼 여러 데이터를 하나의 묶음으로 다루는 것과 유사한 개념입니다.

2. 메모리 페이징과 매핑

운영체제는 물리 메모리가 부족할 때 사용하지 않는 페이지를 디스크(하드 드라이브)로 옮기는 페이징을 사용합니다.

  • 물리 메모리: 현재 즉각적으로 사용 가능한 RAM입니다.
  • 페이지 파일: 부족한 물리 메모리를 보충하기 위해 HDD나 SSD의 일부를 사용하는 공간입니다. 이곳에 있는 것은 물리 메모리에 로드될 준비가 된 상태로 보시면 됩니다.

하드에 있는 페이지는 실제로 메모리에 있을 때만 물리적 주소에 매핑됩니다. 이러한 방식으로 물리 메모리를 절약할 수 있습니다. 하드에 있는 데이터가 메모리에 로드되지 않으면 물리적 주소 할당의 필요성이 없는 것입니다.

3. 가상 메모리의 저장 위치

가상 메모리는 실제로 물리 메모리를 초과하여 사용할 수 있도록 하드 디스크의 일부를 이용하는 기법입니다. 이 때 가상 메모리는 물리 메모리(RAM)와 디스크 공간의 결합으로 이루어져 있습니다. 페이징 기법을 통해 운영체제는 메모리를 관리합니다.

관련 질문과 답변 링크

  1. 페이징 기법과 메모리 매핑 - 메모리 및 페이징 기법에 대한 더 깊이 있는 설명을 제공합니다.
  2. 가상 메모리 관리 - 가상 메모리가 어떻게 운영되는지에 대한 개념 이해를 도와줍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오류님의 프로필 이미지
오류

작성한 질문수

질문하기