[ OSTEP ] 주소 공간의 개념

Minsu._.Lighting·2024년 3월 14일
0

[ OSTEP ] 정리 모음집
" OS공부를 위한, 램지 H. 아파시 뒤소의 OSTEP 을 읽고 내용 요약 / 정리 "

💡 핵심

" 가상 메모리 시스템은 프로세스 전용 공간이라는 환상을 프로그램에게 제공할 책임이 있다! "

  • 가상 메모리에 프로그램 명령어 전부와 데이터 전부가 저장되며, 하드웨어의 도움을 받아 운영체제는 가상 메모리 주소를 물리 주소로 변환시킨다.
  • 물리 주소는 원하는 정보를 반입하기 위해 물리 메모리에 전달된다.

📢 운영체제는 많은 프로세스를 대상으로 이러한 작업을 수행해 프로그램과 운영체제를 보호한다!


💡 주소 공간의 개념

📌 초기 시스템

  • 초기 컴퓨터의 물리 메모리

    - 특별한 가상화는 존재하지 않았으며 사용자 또한 운영체제로부터 그리 많은 것을 기대하지 않음
    - 물리 메모리에 하나의 실행중인 프로그램이 존재했으며 해당 프로그램은 운영체제가 차지하는 공간 외의 공간을 사용 함

📌 멀티 프로그래밍 & 시분할

  • 더 효과적인 컴퓨터를 위해 시분할을 이용한 멀티 프로그래밍 시대가 도래!

  • 초기 시분할 기법은 매우 엉성 했다!
    - 하나의 프로세스를 짧은 시간 동안 실행시키고 해당 기간 동안 프로세스에게 모든 메모리를 접근할 권한을 줌, 기간이 끝나면 프로세스를 중단하고 중단 시점의 모든 상태를 디스크 종류의 장치에 저장한 후 다른 프로세스를 탑자해 실행시킴...[반복]
    - 메모리 내용 전체를 디스크에 저장하는 행동이 반복되어 속도가 매우 느렸다.

  • 프로세스 전환 시 프로세스를 메모리에 그대로 유지하면서, 운영체제가 시분할 시스템을 효율적으로 구현할 수 있게!

    - 위와 같이 메모리에 프로세스를 유지하고 하나의 프로세스가 실행될 떄 다른 프로세스들은 준비 큐에서 실행을 기다림
    - 여러 프로그램이 메모리에 동시에 존재하려면 각 프로세스가 서로의 메모리를 읽거나 혹은 더 안좋게 쓸 수 있는 상황이 없어야 하므로 보호(protection)가 중요한 문제!

📌 주소 공간

  • 운영체제의 사용하기 쉬운(Easy To Use) 메모리 개념
    - 프로세스가 서로의 메모리를 읽거나 사용하는 행위를 막기 위함

  • 주소 공간은 실행 프로그램의 모든 메모리 상태를 갖는다

    • 코드(Code)
      - 코드, 명령어
      - 코드는 정적이기에 주소 공간에 저장하기 쉬워 상단에 배치하며 프로그램 실행되면서 추가 메모리를 필요로 하지 않음
    • 스택(Stack)
      - 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등 저장
      - 프로그램이 실행되면서 메모리가 확장되거나 축소될 수 있기에 하단에 배치
      - 확장시 위 방향으로 확장
    • 힙(Heap)
      - C의 malloc(), C++의 new를 통해 할당된 동적 메모리
      - 프로그램이 실행되면서 메모리가 확장되거나 축소될 수 있기에 상단에 배치
      - 확장 시 아래 방향으로 확장

    📢 정적 변수 등이 위치하는 데이터(Data)영역도 있지만 코드, 스택, 힙만 있다고 가정!
    📢 스택과 힙의 배치는 관례일 뿐 주소 공간을 다르게 배치할 수도 있다!
    📢 실제로 프로그램이 물리 주소 0에서 16KB 사이에 존재하는 것이 아니며 실제로는 임의의 물리 주소에 탑재된다!

📌 메모리의 가상화(Virtualizing Memory)

  • 운영체제가 물리 메모리를 공유하는 다수의 프로세스에게 프로세스 전용의 커다란 주소 공간이라는 개념을 제공하는 것

    - 사진의 프로세스A가 주소 0으로부터 load 연산을 수행할 때, 운영체제는 하드웨어의 지원을 통해 물리 주소 0이 아니라 물리 주소 320KB를 읽도록 보장해야 함
    📢 주소 0은 가상 주소(Virtual Address) 이다!

📌 가상 메모리의 주요 목표

  • 투명성(Transparency)
    - 운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 시스템을 구현해야 한다!

  • 효율성(Efficiency)
    - 운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다!
    - 시간적 : 프로그램이 너무 느리게 실행되서는 안 된다.
    - 공가적 : 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해서는 안 된다.
    - 운영체제는 TLB 등의 하드웨어 기능을 포함해 하드웨어의 지원을 받아야 함!
    - [ TLB ] 참고

  • 보호(Protection)
    - 운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고 운영체제 자신도 프로세스로부터 보호 해야 한다!
    - 보호 성질을 이용해 프로세스들을 서로 고립 시킬 수 있다.

    [ 고립의 원칙 ]

    • 고립은 신뢰할 수 있는 시스템을 구축하는 데 중요한 원칙!
    • 두 개체가 서로 적절하게 고립된 경우, 한 개체가 실패하더라도 상대 개체에 아무 영향을 주지 않는다는 것을 암시!
    • 운영체제는 프로세스를 서로 고립시키기 위해 노력하고 이런 방식으로 한 프로세스가 다른 프로세스에게 피해를 주는 것을 방지!
    • 메모리 고립을 사용해 운영체제는 프로그램이 운영체제 동작에 영향을 줄 수 없다는 것을 보장!
profile
오코완~😤😤

0개의 댓글

관련 채용 정보