[ OSTEP ] 정리 모음집
" OS공부를 위한, 램지 H. 아파시 뒤소의 OSTEP 을 읽고 내용 요약 / 정리 "
" 가상 메모리 시스템은 프로세스 전용 공간이라는 환상을 프로그램에게 제공할 책임이 있다! "
- 가상 메모리에 프로그램 명령어 전부와 데이터 전부가 저장되며, 하드웨어의 도움을 받아 운영체제는 가상 메모리 주소를 물리 주소로 변환시킨다.
- 물리 주소는 원하는 정보를 반입하기 위해 물리 메모리에 전달된다.
📢 운영체제는 많은 프로세스를 대상으로 이러한 작업을 수행해 프로그램과 운영체제를 보호한다!
더 효과적인 컴퓨터를 위해 시분할을 이용한 멀티 프로그래밍 시대가 도래!
초기 시분할 기법은 매우 엉성 했다!
- 하나의 프로세스를 짧은 시간 동안 실행시키고 해당 기간 동안 프로세스에게 모든 메모리를 접근할 권한을 줌, 기간이 끝나면 프로세스를 중단하고 중단 시점의 모든 상태를 디스크 종류의 장치에 저장한 후 다른 프로세스를 탑자해 실행시킴...[반복]
- 메모리 내용 전체를 디스크에 저장하는 행동이 반복되어 속도가 매우 느렸다.
운영체제의 사용하기 쉬운(Easy To Use) 메모리 개념
- 프로세스가 서로의 메모리를 읽거나 사용하는 행위를 막기 위함
주소 공간은 실행 프로그램의 모든 메모리 상태를 갖는다
- 코드(Code)
- 코드, 명령어
- 코드는 정적이기에 주소 공간에 저장하기 쉬워 상단에 배치하며 프로그램 실행되면서 추가 메모리를 필요로 하지 않음- 스택(Stack)
- 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 등 저장
- 프로그램이 실행되면서 메모리가 확장되거나 축소될 수 있기에 하단에 배치
- 확장시 위 방향으로 확장- 힙(Heap)
- C의 malloc(), C++의 new를 통해 할당된 동적 메모리
- 프로그램이 실행되면서 메모리가 확장되거나 축소될 수 있기에 상단에 배치
- 확장 시 아래 방향으로 확장📢 정적 변수 등이 위치하는 데이터(Data)영역도 있지만 코드, 스택, 힙만 있다고 가정!
📢 스택과 힙의 배치는 관례일 뿐 주소 공간을 다르게 배치할 수도 있다!
📢 실제로 프로그램이 물리 주소 0에서 16KB 사이에 존재하는 것이 아니며 실제로는 임의의 물리 주소에 탑재된다!
load
연산을 수행할 때, 운영체제는 하드웨어의 지원을 통해 물리 주소 0이 아니라 물리 주소 320KB를 읽도록 보장해야 함 투명성(Transparency)
- 운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 가상 메모리 시스템을 구현해야 한다!
효율성(Efficiency)
- 운영체제는 가상화가 시간과 공간 측면에서 효율적이도록 해야 한다!
- 시간적 : 프로그램이 너무 느리게 실행되서는 안 된다.
- 공가적 : 가상화를 지원하기 위한 구조를 위해 너무 많은 메모리를 사용해서는 안 된다.
- 운영체제는 TLB
등의 하드웨어 기능을 포함해 하드웨어의 지원을 받아야 함!
- [ TLB ] 참고
보호(Protection)
- 운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고 운영체제 자신도 프로세스로부터 보호 해야 한다!
- 보호 성질을 이용해 프로세스들을 서로 고립 시킬 수 있다.
[ 고립의 원칙 ]
- 고립은 신뢰할 수 있는 시스템을 구축하는 데 중요한 원칙!
- 두 개체가 서로 적절하게 고립된 경우, 한 개체가 실패하더라도 상대 개체에 아무 영향을 주지 않는다는 것을 암시!
- 운영체제는 프로세스를 서로 고립시키기 위해 노력하고 이런 방식으로 한 프로세스가 다른 프로세스에게 피해를 주는 것을 방지!
- 메모리 고립을 사용해 운영체제는 프로그램이 운영체제 동작에 영향을 줄 수 없다는 것을 보장!