“운영체제 : 아주 쉬운 세가지 이야기”를 읽으면서 핵심 내용을 정리하였습니다.
이화여대 반효경 교수님의 운영체제 강의를 듣고 복습 차원에서 책 한권을 완독해보고자 합니다.
잘못된 정보가 있다면 댓글 남겨주시면 감사하겠습니다!
주소 공간의 개념
초기의 컴퓨터는 한번에 하나의 프로세스만 실행 할 수 있었기 때문에 아주 간단한 주소 공간을 가지고 있었다. 물리 메모리에 운영체제가 항상 상주하고 있었고 나머지공간은 프로세스를 위한 공간이었다.
하지만 사용자가 컴퓨터를 더 효과적으로 사용하기를 원하게 되면서 멀티 프로그래밍과 시분할 시스템이라는 개념이 등장하게 되었고 발전된 개념이 등장함에 따라 주소 공간의 개념도 발전할 필요가 생겼다.
•
운영체제는 메모리를 어떻게 가상화를 하여 프로세스에게 전용 메모리 공간이 있는 것처럼 느끼게 할까?
멀티 프로그래밍
여러 프로세스가 실행 준비 상태에 있고 운영체제는 프로세스를 전환 시키면서 실행
초기 하나의 프로세서가 하나의 프로세스만 처리할 수 있는 방식에서 여러 프로세스를 처리 할 수 있도록 발전한 방식
시분할 시스템
하나의 프로세스를 짧은 시간동안 실행시키고 다른 프로세스로 전환하는 작업을 아주 빠르게 진행하면서 마치 동시에 여러 프로세스가 실행되고 있는 것과 같은 효과를 주는 시스템
초기 주소 공간의 한계 및 발전
•
초기
◦
물리 메모리 공간의 남는 부분 전체를 하나의 프로세스가 사용함
◦
프로세스간 전환이 일어날 때 마다 해당 시점의 프로세스 상태를 디스크에 저장
◦
디스크에 읽고 쓰는 과정은 매우 느리기 때문에 개선 필요
•
발전
◦
프로세스 전환시 프로세스를 메모리에 그대로 유지하면서 효율적으로 시분할 시스템 구현
◦
여러 프로그램이 동시에 메모리에 존재하게 되면서 한 프로세스가 다른 프로세스의 주소공간에 침범할 수 없도록 보호가 중요한 문제로 부상함
주소 공간
실행 되는 프로세스가 가정하는 메모리의 모습
•
코드 세그먼트
◦
프로그램의 코드가 저장된 부분
◦
코드는 정적이기 때문에 추가적인 메모리가 필요하지 않음
•
스택
◦
함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환값등을 저장
◦
메모리의 이미 할당된 공간을 사용하기 때문. 스택 포인터를 움직이는 것 만으로 변수를 저장할 수 있음
◦
정해진 스택 메모리를 넘어가면 stackoverflow. 재귀를 반복적으로 호출할때 생길 수 있음
◦
스택에 저장된 개체가 캐시에 담길 확률이 힙보다 높다
•
힙
◦
동적으로 할당되는 메모리를 위해 존재
◦
새로운 메모리 할당시 빈공간 리스트에서 공간을 찾는 과정 / 해제 시 빈공간 리스트를 합치는 과정등 부가적인 과정들에서 오버헤드 발생함
•
가상 주소 (Virtual address)
◦
모든 프로세스는 가상주소라는 큰 주소 공간을 가지고 있는 것처럼 생각을 한다.
◦
하지만 가상주소의 0번지가 물리 메모리의 0번지가 아니다.
◦
가상 주소의 0번지를 실제 물리 메모리의 주소로 맵핑 하는 것이 메모리 가상화의 핵심이다.
메모리 가상화의 목표
•
투명성
◦
운영체제는 프로그램이 가상 메모리의 존재를 인식하지 못하도록 가상 메모리 시스템을 구축 해야한다.
◦
프로그램은 자신이 전용 물리 메모리를 소유한 것 처럼 행동해야한다.
•
효율성
◦
시간과 공간 측면에서 효율적이어야한다.
◦
가상화를 지원하기 위해 너무 많은 시간이 걸리거나 너무 많은 메모리가 사용되어서는 안된다.
•
보호
◦
운영체제는 프로세스를 다른 프로세스로 부터 보호해야하고 운영체제 자신도 다른 프로세스로 부터 보호 되어야 한다.
◦
자신의 주소 공간 이외의 주소에 접근할 수 없다.
고립(isolation)의 중요성
신뢰할 수 있는 시스템을 구축하는데 중요한 원칙이다. 한 개체가 실패하더라도 다른 개체에 영향을 주지 않는 것을 말한다. 메모리의 고립을 사용하면 특정 프로세스가 운영체제에 영향을 끼칠 수 없다는 것도 성립한다.
마이크로 커널은 운영체제 안에서 운영체제의 구성요소끼리 고립을 시킨 방식을 말한다.