ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 연습문제풀이 #2
    정리필요2 2008. 9. 2. 19:42

    # 2.2 사용자 모드와 커널 모드의 차이점은 무엇이며 왜 필요한가?

    모드 비트라고 부르는 하나의 비트를 CPU의 상태 레지스터에 추가하여 현재의 모드를 나타낸다. (0은 커널 모드 그리고 1은 사용자 모드). 모드 비트를 보면, 현재 운영 체제가 동작하는지 또는 사용자 프로그램이 동작하는지를 알 수 있다.

    사용자 프로세스가 자신의 코드 영역의 명령어를 실행할 때에는 사용자모드이다. 그러나 사용자 프로그램이 시스템 호출(트랩)을 하거나, 인터럽트 또는 하드웨어의 보호기능이 감지하는 사용자의 오류(트랩)가 발생하여 운영 체제로 진입한 경우, CPU의 실행 모드는 커널 모드로 전환된다.

    사용자 모드에서는 인터럽트나 시스템의 제어, 입출력의 제어와 관련된 특수(특권)명령어들은 수행할 수 없고, 또한 참조하는 메모리 영역도 메모리 보호 하드웨어에 의해 제한함으로써 시스템의 보호 기능을 구현한다.

    커널 모드에서는 하드웨어적으로 이러한 제한이나 보호를 수행하지 않는데, 그 이유는 커널 모드에서는 특권 명령어들을 사용해야 하고, 여러 사용자의 영역을 참조해야 하며, 또한 오류가 없는 운영 체제의 코드가 실행되기 때문이다.

    이중모드(사용자모드와 커널모드)는 시스템의 정상적인 운영을 위해서, 운영 체제와 다른 모든 프로그램들의 자료 및 공유 자원은 한 프로그램의 오류로부터 보호되어야 한다. 이를 위해서 채택된 접근 방법은 여러 가지의 실행 모드를 서로 구별할 수 있는 수단을 제공하는 것이다. (참조 교재 2.6.1 절)

    # 2.3 소프트웨어 트랩, 폴트(하드웨어 트랩)와 인터럽트의 차이는 각각 무엇인가? 각 기능의 용도는 무엇인가?


     인터럽트(interrupt) : 프로세스가 실행하는 명령의 순서를 바꾸는 동작; 하드웨어의 전기적 신호. 인터럽트가 걸리면 기본적으로 CPU는 자신이 현재 실행중이던 곳의 주소인 EIP를 스택 (커널 모드 스택)에 저장하고, 해당 인터럽트나 예외를 처리한다.


    # 인터럽트 분류

    Asynchronous interrupt (비동기, CPU 외부에서 발생, IO장비에서 아무때나 오는 신호)

    Maskable interrupt (IO장비에서 오는 모든 인터럽트, INTR pin으로 들어옴, STI(set interrupt-enable flag) CLI(clear interrupt-enable flag) 로 우선순위 제어가능 )

    : 입출력 장치, 타이밍 장치, 전원 등 cpu외부적인 요인으로 발생하는 것으로 다음과 같은 예를 들 수 있다. 즉 입출력 장치가 데이타의 전송을 요구하거나, 정보 전송이 끝났음을 알릴 때, 정해진 시간이 지났을 때.

    Non-maskable interrupt (NMI pin으로 들어옴)

    : 전원 공급이 끊어질 때 CPU의 전 상태가 비소멸성 기억 장치로 수밀리초 이내에 기억되게 하는 서비스 프로그램으로의 인터럽트가 발생한다.


    Synchronous interrupt (동기, CPU내부에서 발생, cpu clock과 동기화되어 발생)

    ◎ Fault(폴트) : fault란 발생한 사건을 복구하고 다시 재시작할 수 있는 상황들이다.

    ◎ Trap(트랩) : trap은 해당 instruction이 종료되어서 다시 실행될 필요가 없는 경우, 그 다음 instruction의 주소를 스택에 넣게 됩니다. 따라서 이 trap을 처리한후 돌아와서는 그 다음 instruction을 실행하는 것입니다. 대표적인 용도로 디버깅을 들 수 있습니다. 매 instruction이 끝나고나서 그 결과를 보기 위해서 사용될 수 있다. 또는 breakpoint의 설정등에 사용된다.

    ◎ Abort(어보트) : 이것은 심각한 에러로 인하여 더 이상 진행이 될 수 없는 상황에서 발생합니다. 이때는 스택의 EIP에는 의미없는 값이 저장될 수도 있고, 프로세스가 종료되어야만 하는 상황이다.



    2.4 DMA는 어떤 종류의 입출력에 유용한가? 또한, 그 이유는 무엇인가?

    DMA 전송은 많은 응용에 사용 되는데, 자기 디스크와 메모리 사이의 고속 전송이나 대화형 단말기의 화면을 다시 그리는 작업에 유용하게 사용될 수 있다. 즉 메모리에서 프로그램의 제어에 따라 변화하고 있는 화면의 이미지를 주기적으로 단말기로 전송하는데 DMA전송이 유용하다. 이유는, 단순히 많은 양의 데이터를 메모리에서 읽어 디스크나 단말기로 전송하는데, DMA가 중간에서 주기적으로 전송의 시작과 완료만 CPU에 인터럽트 처리해주고, CPU는 다른 일을 할 수 있다.


    2.7 운영 체제의 보호는 컴퓨터 시스템의 올바른 운영을 위해서 불가결한 요소이다. 이중 모드, 메모리 보호, 그리고 클럭은 이러한 기능을 제공하기 위해서 고안된 개념이다. 그러나 시스템의 융통성을 증진하기 위해서 사용자에게는 최소한의 제약만을 주어야 한다. 다음에 나열된 동작은 보통 보호되어 있다. 이중에 반드시 보호되어야 하는 것은 무엇인가?

    (1) 사용자 모드로 변경

    (2) 커널 모드로 변경

    (3) 커널 메모리로부터 읽기

    (4) 커널 메모리에 쓰기

    (5) 커널 메모리에 있는 명령의 호출

    (6) 클럭 인터럽트의 끄기

    (7) 클럭 인터럽트를 켜는 것


    (6)번 클럭 인터럽트를 끄는 것도 치명적일 수 있지만, 답은 (2) 번이 아닐까 생각한다. 커널모드, root 권한을 가진 사용자는 시스템의 파일들을 삭제/변경/열람은 물론 시스템의 모든 설정을 변경할 수 있다. 특히 보안이 요구되는 국방, 산업기밀을 보관하는 서버들의 OS가 관리하는 자료들은 가치를 따질 수 없으므로 복구가 불가능하다.


    2.8 캐시는 어느 경우에 유용한가? 이들이 해결하는 문제는 무엇인가? 반대로 이들이 야기하는 문제는 무엇인가? 만약에, 캐시의 용량을 그것이 사용되는 장치의 용량과 똑같이 크게 할 수 있다면(예를 들어, 디스크와 같은 용량의 캐시), 그렇게 해서 장치를 없애 버리고 대신에 캐시를 쓰면 안 되는가?


    캐시메모리는 CPU에서 메모리에 접근하는 경우에 그 자료를 메모리보다 속도가 빠른 캐시 메모리에 복사하여, 다음에 같은 자료를 사용할 때에 캐시를 사용하여 속도를 빠르게 하는 목적으로 개발되었다.

    캐쉬는 기억장치간의 속도차이를 줄여서 자료 이전을 신속히 하여, 공유성을 높인다.


    기억장치의 계층적인 구조에서는 예를 들어 프로그램이 실행되면 디스크의 한 페이지가, 디스크 캐쉬, 메모리, 캐쉬, 레지스터 5개의 다른 장치에 모두 있게된다. 한번에 하나의 단일 프로세스만 실행하는 경우에는 문제가 되지 않는다. 왜냐면, 어떤 정보에 대한 접근은 항상 그 정보가 들어있는 계층의 최상위 수준에 대한 접근이기 때문이다.

    그러나 다중 태스킹 시스템에서는 CPU가 동시에 여러 프로세스를 처리하기 때문에 만약 여러 프로세스에서 그 페이지를 사용한다고 하면, 이들 각 프로세스들은 항상 최근에 수정된 내용을 접근할 수 있도록 상당한 주의를 기울여야 한다.

    다중 프로세서 시스템에서는 여러개의 프로세서와 레지스터가 있으니 더 복잡해진다. 분산처리 시스템이나 대용량 서버에서는 더더욱 복잡해진다. 그 많은 레지스터와 저장장치들이 수 십만의 동시접속자들의 수정에 일관성있는 data를 유지하려면 매우 복잡한 문제다.


    디스크와 같은 용량의 캐쉬..디스크를 없애고 캐쉬를 대신쓴다?

    캐쉬에 주로 쓰이는 sram과 주기억장치에 주로 쓰이는 dram은 속도는 빠르지만 둘다 휘발성이기 때문에 용량을 아무리 많이 한다해도 컴퓨터 끄면 자료가 다 날아간다. 그리고 OS나 중요한 데이터는 안전하고 비휘발성이며 경제적 저장장치인 디스크에 보관해야 한다.

    따라서 안된다.


Designed by Tistory.