초기의 컴퓨터는 한 사람이 컴퓨터를 조작하고 모든 자원을 썼지만, 시간이 흐르면서 시스템을 여러명이 나누어 쓰는 편이 꽤 효율적이라는 사실을 발견하게 되었다. 시스템을 공유한다는 사실은 효율성을 높여준것이지만 그에 따라 여러가지 문제가 발생하게 되었다.
따라서 오에스는 시스템을 공유하는 환경에 대해 자기자신을 보호하면서 각자의 환경을 보장해주어야만 하는 임무를 띄게 되었다.
크게 시스템을 '보호' 하는 방법으로 4가지를 들어 볼 수 있는데, 오에스의 표준이라고 하는 유닉스를 예를 들어 설명해 보겠다.
첫번째 방법으로 'OS 프로텍션' 이다. 유닉스는 듀얼모드로 동작한다. 이 말은 곧, 유저모드와 시스템모드를 의미하게 되는데 하드웨어 차원에서 본다면 모드비트(mode bit)라는 것이 있어서 현재의 모드를 나타내주는 방법으로 구분 되어진다. 처음 시스템이 부팅될때에 하드웨어가 시스템 모드로 부팅하게 된다. 그리고 운영체제가 띄워지면서 이제사 유저모드로 유저 프로세스를 처리해 주게 되는 것이다. 트랩(trap: 소프트웨어적인 인터럽트) 이나 인터럽트가 발생하면 하드웨어는 즉시 유저모드에서 시스템 모드로 변신을 한뒤 오에스가 처리를 하고 다시 유저 모드로 모드 비트를 셋팅한다음에야 유저에게 프로세스 권한을 넘겨주게 된다.
이러한 듀얼모드의 필요성을 묻는이가 있는가? 바로 임의의 유저로 부터 시스템을 보호하기 위한 일종의 면역 장치이기 때문이다. 이것이 바로 OS Protection 이다. 일부 극단적인 명령어 셋( instruction set) 들은 시스템 모드에서만 실행이 가능하며, 일반 유저들이 그러한 명령어를 부가하게 되면 시스템이 알아서 불법으로 규정하고 오에스로 하여금 트랩을 발생하도록 하는 것이다. 참고로 수퍼유저, 관리자유저는 시스템 모드에서 놀수 있는 특수한 권한이 부여된다.
두번째로 I/O 프로텍션을 들 수 있다. 간단하게 얘기해서 오에스를 거치지 않은 입출력을 발생하게 하지 못하게 하는 것이다. 즉, 모든 I/O는 오에스를 통해서- 합법적인 절차를 거쳐서- 발생하게 된다.
세번째로 씨피유 프로텍션을 들 수 있다. 이것은 유저 프로그램이 프로세스권한을 잡은 채로 무한루프에 빠졌을 상태!(오에스로 컨트롤을 돌려주어야 되는데 그러지 못할때) 를 방지하는 것이다. 어떻게? /.. 바로 간단한 타이머의 도입으로 가능하게 된다. 카운터는 일정시간마다 양수에서 0으로 점차 줄어들게되고 0이되면 인터럽트를 발생시켜 컨트롤을 유저프로그램에게서 빼앗고 프로그램을 강제종료시켜버리는 아주 냉혹한 방법입니다.
마지막으로 메모리 프로텍션을 들 수 있다. 메모리 프로텍션은 왜 필요하냐? 보호되지 않은 메모리 영역에 오에스의 슈퍼유저 공간이 있다고 생각해보자! 일반유저가 인터럽트를 발생시키거나 일반 프로그램이 특정 메모리를 접근하려고 하면 어떻게 되겠는가? 말하지 않아도 알 수 있을 것이다. 일반유저가 수퍼유저가 되거나?... 스플이나 버퍼 영역이 덮여서 망가지거나 엉뚱한 인터럽트 처리가 되거나?... 결과는 참담하다. 그래서 메모리 영역에 대한 보호가 필요한 것이다. 이러한 보호는 오에스에 대해서 뿐만아니라 각 유저 프로그램, 유저 사이에서도 이루어 져야할 사항인것이다. 따라서 메모리 프로텍션은 강력하게 하드웨어 적으로 지원이 되어야 하는데 이는 나중에 페이징, 세그멘터에션, 가상메모리등 다룰때 다시한번 살펴보기로하고 지금은 여러기법 중에 한가지를 소개한다.
이 방법은 베이스(base) 와 리미트(limit) 레지스터를 지정하는 것이다. 이들은 각각 메모리 덩어리가 들어있는(한개의 어플일 수도 있고, 데이터 일 수도 있고,...) 물리적인 메모리의 시작 주소와 전체의 크기를 담아 줌으로써 절대로 그 이상또는 이 하의 주소를 탐내지 못하게 제한하는 기법이다. 이러한 프로텍션은 씨피유가 하드웨어적으로 모든! 유저보드에서 발생하는 어드레스를 이 두 레지스터쌍들과 비교를 함으로써 그 적법함을 판단하는 방식으로 이루어 지며, 두 레지스터쌍들은 반드시 시스템 모드에서만 접근이 가능하기 때문에 함부로 고칠 수 없다.
이상으로 프로텍션에 대해 간단히 살펴보았다. 윈도우에 익숙해진 관리자 모드 때문인지 우분투 환경에서의 암호입력요구는 때론 번거로울때가 있다. 어느 것이 좋은지는 피부에 와 닿을정도로 느껴지진 않지만 운영체제를 공부하고 있는 나로써는 좀 더 공학적인 마인드로 운영체제를 이해할 필요가 있는 듯하다.
다음장에서는 프로세스(process)! 란 도대체 무엇인가를 살펴보도록 하자
'OS > OS 파헤치기!' 카테고리의 다른 글
5. 프로세스의 생성 사용 및 소멸 (0) | 2010.09.22 |
---|---|
4. 프로세스(process)? (0) | 2010.08.25 |
2장 컴퓨터 구조 (0) | 2010.08.16 |
1장. OS란? (0) | 2010.08.12 |
[공지]시작하며...꼭 읽어주시길. (0) | 2010.08.11 |