주기억장치와 메모리

Woosung Kim·2022년 1월 21일
0

주기억장치와 프로그램

메모리의 구조

메모리는 주소데이터로 이루어진다.

프로그램 개발

  • 소스파일 (Source File) : 고급언어 또는 어셈블리어로 작성된 파일
  • 목적파일 (Object File) : 컴파일 또는 어셈블 결과
  • 실행파일 (Executable File) : 링크 결과

  • 컴파일러 (Compiler) : 소스파일을 컴파일하여 목적파일을 생산한다.
  • 어셈블러 (Assembler) : 어셈블리 코드를 어셈블하여 목적파일을 생산한다.
  • 링커 (Linker) : 목적파일과 라이브러리를 연결하여 실행파일을 생산한다.
  • 로더 (Loader) : 실행파일을 메모리에 적재한다.

프로그램의 실행

-> 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당됨

프로세스 주소 공간

  • 코드 Segment
    - 프로그램 소스코드 저장
  • 데이터 Segment
    - 전역 변수, 정적 변수, 배열, 구조체 등 저장
  • 스택 Segment
    - 함수 호출 주소, 파라미터, 리턴 값, 지역 변수 등 저장

👉 구역을 나눈 이유?

  • 최대한 데이터를 공유하여 메모리 사용량을 줄여야 한다.
  • Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유한다.
  • Stack과 데이터를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위해서이다.

프로그램을 메모리에 올리기

MMU (메모리 관리 장치)

논리주소(Logical Address) -> 물리주소(Physical Address)로 변환

  • 논리 주소(Logical Address)
    • CPU가 생성 한 가상 주소
  • 물리 주소(Physical Address)
    • 메모리 유닛 내의 위치
  • 재배치 레지스터(Relocation register)
    • 논리주소를 물리 주소로 변환시켜 주는 메모리 관리 장치(MMU)내의 레지스터

👉 주소 변환이 필요한 이유?

  • 다중 프로그래밍 환경에서 로더(Loader)는 메모리의 빈자리에 실행파일을 올려주는데, 이 빈자리의 위치는 항상 일정하지 않아 매 실행시 프로그램의 적재 주소는 다르다.
  • 따라서 프로그램 내에 작성된 Logical Address는 실제 메모리 접근 시 프로그램 적재 주소만큼 오프셋을 더하여 Physical Address로 변환될 필요가 있다.
profile
개발하는 강아지

0개의 댓글