CS 2

메모리를 관리하는 전략! 논리/물리 주소와 MMU, 페이징과 세그먼테이션까지!

메모리 공간은 한정이 되어 있습니다.그렇기에 여러 프로세스를 실행하려면 메모리공간을 효율적으로 쓸 수 있어야 합니다.CPU가 프로세스를 처리할 때 보는 주소값과 실제 물리 메모리의 주소값은 다릅니다.이때 프로세스가 보는 메모리 영역을 논리 메모리 영역, 또는 가상 메모리 영역이라고 하고, 실제 데이터가 있는 메모리 영역을 물리 메모리 영역이라고 합니다. 즉, 모든 프로세스는 자신만의 논리주소 공간을 가지며, 0부터 시작합니다.(하지만 실제로 메모리의 0번 주소에 있는것은 아닙니다.)그럼 왜 논리주소를 사용할까요? 대표적으로 다음의 이유가 있습니다.보안 및 안정성자신의 논리주소만 본다 -> 다른 프로세스의 메모리에 접근불가. - 메모리보호메모리 관리 효율성가상 메모리를 통해 메모리를 동적으로 할당 가능멀티..

CS 2025.02.15

Call Stack이 뭘까? 디스 어셈블리, 레지스터, 메모리를 뜯어보자!

콜스택(Call Stack)은 함수의 호출, 실행, 그리고 복귀를 관리하기 위해 사용되는 스택 기반의 메모리 구조입니다 (LIFO) 함수가 호출될 때 해당 함수의 실행 정보를 저장하기 위해 스택프레임이 생성되며, 함수 실행이 완료되면 해당 스택프레임이 제거됩니다. 콜스택 안에는 함수 종료 시 돌아갈 주소, 인자, 지역변수, 함수 호출 전 상태를 복원하기 위한 레지스터 값등이 스택프레임으로 저장됩니다.그럼 어떤식으로 생성이 되고 저장이 되는지 확인해 보겠습니다.  우선, 해당 코드의 main함수 내의 MyAdd함수 호출 시 어떤 식으로 동작을 하는지 디스 어셈블리를 보고 한줄씩 해석해보겠습니다. x86환경에서 MyAdd를 호출 시 매개변수들이 콜스택에 어떤 과정을 거쳐 저장되는지에 보겠습니다.사진 속에 설..

CS 2025.02.12