ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공룡책] Ch 1. 서론
    공부/운영체제(OS) 2022. 4. 12. 17:07
    반응형

    이 글은 공룡책을 읽고 정리한 글입니다.


     

     

     

    0. 서론


    운영체제컴퓨터 하드웨어를 관리하는 소프트웨어이고, 응용 프로그램을 위한 기반을 제공하며, 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다.


     

     

     

    1. 운영체제가 할 일


    컴퓨터 시스템은 크게 네 가지 구성요소인 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분할 수 있다.

     

    1. 하드웨어

    CPU, 메모리, I/O 장치와 같이 기본 계산용 자원을 제공한다.

     

    2. 응용 프로그램

    워드 프로세서, 스프레드 시트, 컴파일러, 웹 브라우저 등은 사용자의 계산 문제를 해결하기 위해 이들 자원이 어떻게 사용될지 정의한다.

     

    3. 운영체제

    다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정한다.

     

    운영체제는 자기자신만으로는 유용한 기능을 수행하지 못하지만, 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다.


    1.1 사용자 관점

    1. PC

    PC의 경우엔 사용자가 모든 자원을 독점하도록 설계되어 있고, 사용자가 수행하는 작업을 최대하는 것이 목표이기 때문에 운영체제는 사용의 용이성을 위해 설계된다. 그래서 HW / SW 자원이 어떻게 공유되느냐의 자원의 이용에는 전혀 신경을 쓰지 않는다.

     

    2. 모바일 장치

    모바일 장치는 보통 무선 기술을 통해 네트워크에 연결되어 있고, 터치스크린이나 음석 인식을 통해 상호 작용을 한다.

     

    3. 가전제품, 자동차 내의 내장형 컴퓨터

    컴퓨터, 운영체제, 응용 프로그램이 사용자의 개입 없이 작동되도록 설계 되었다.


    1.2 시스템 관점

    운영체제는 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지 결정하니 자원 할당자로 볼 수 있다. 그리고 운영체제는 사용자 프로그램의 수행을 제어하고, 특히 입출력 장치의 제어와 작동에 대해 깊이 관여하는 제어 프로그램으로도 볼 수 있다.


    1.3 운영체제의 정의

    운영체제는 유용한 컴퓨팅 시스템을 만드는문제를 해결할 수 있는 합리적인 방법을 제공하기 때문에 존재한다. 그리고 컴퓨터 시스템의 기본 목표는 프로그램을 실행하고 사용자 문제를 더욱 쉽게 해결할 수 있게 하는 것이다. 하지만 하드웨어만으로는 사용하기가 쉽지 않아 응용 프로그램이 개발되는데, 이런 프로그램에는 특정 공통 작업이 필요하기 때문에 자원을 제어하고 할당하는 일반적인 기능을 운영체제라는 하나의 소프트웨어로 통합된다. 그래서 운영체제는 컴퓨터에서 항상 실행되는 프로그램이다. 이것은 일반적으로 커널이라고 부른다.


     

     

     

    2. 컴퓨터 시스템의 구성


    컴퓨터 시스템은 하나 이상의 CPU와 구성요소와 공유 메모리 사이의 액세스를 제공하는 공통 버스를 통해 연결된 여러 가지 장치 컨트롤러로 구성된다. 이때 장치 컨트롤러는 제어하는 주변 장치와 로컬 버퍼 저장소 간에 데이터를 이동하게 만든다.

    일반적으로 운영체제는 각 장치 컨트롤러마다 장치 드라이버가 있다. 장치 드라이버는 장치 컨트롤러의 작동을 잘 알고 있고, 나머지 운영체제에 장치에 대한 일관된 인터페이스를 제공한다.

    CPU와 장치 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁한다. 그리고 공유 메모리를 질서 있게 액세스하기 위해 메모리 컨트롤러메모리에 대한 액세스를 동기화한다.

     


    2.1 인터럽트(Interrupts)

    - 컨트롤러가 장치 드라이버에게 작업을 완료했다는 사실을 알릴 때 인터럽트를 통해 알려준다.

    인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다. 왜 이런 기능이 있냐면 CPU는 고급 자원이기 때문에 좀 더 효율적으로 사용하기 위함이다. 

    인터럽트최신 운영체제에서 비동기 이벤트를 처리하기 위해 사용된다. 운영체제와 하드웨어의 상호 작용 방식의 핵심 부분이며, 하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내서 인터럽트를 발생시킬 수 있다.

     

     

    ex) CPU와 입출력장치의 인터럽트 시간 일정

    CPU가 인터럽트 되면, 하던 일을 중단하고 바로 인터럽트를 위한 서비스 루틴이 위치한 주소로 실행에 옮긴다. 이후 서비스 루틴의 실행이 완료되면 CPU는 인터럽트 되었던 연산을 재개한다.

    위 사진에서 CPU의 그래프가 아래로 내려가는 것이 인터럽트 처리이다. 먼저 입출력 장치에서 CPU에 입출력 요청 인터럽트를 보내고, CPU가 해당 인터럽트를 받으면 원래 수행하던 작업을 정지하고 입출력 요청 인터럽트부터 수행한다. 이후 인터럽트 수행이 끝나면 원래 하고있던 원래 수행하던 작업을 다시 재개하는 것이다. 이때 CPU에서는 하나의 명령어의 실행을 완료할 때마다 인터럽트가 있는지 확인한다.


    인터럽트는 매우 빈번하게 발생하기 때문에 빠르게 처리되어야 한다. Windows나 UNIX에서는 인터럽트가 요청되면 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해 이 주소의 배열인 인터럽트 벡터가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 색인된다.

     

    기본적인 인터럽트 메커니즘

    1) CPU에는 인터럽트 요청 라인이라는 선이 있다.

    2) CPU에서 하나의 명령어의 실행을 완료할 때마다 인터럽트 요청 라인에 신호가 왔는지 확인한다.

    3) 신호가 감지되면, 인터럽트 번호를 인터럽트 벡터의 인덱스로 사용(색인)하여 인터럽트 핸들러 루틴으로 점프한다.

    4) 그리고 해당 인덱스와 관련된 주소에서 실행을 시작한다.

     

    인터럽트 입출력 사이클

    1) 장치 컨트롤러가 인터럽트 요청 라인에 신호를 선언하여 인터럽트를 발생 - raise

    2) CPU가 인터럽트를 포착 - catch

    3) 인터럽트 핸들러로 디스패치 - dispatch

    4) 핸들러는 장치를 서비스하고 인터럽트를 지움 - clear

     

    이외에도 인터럽트를 최적화하기 위해 인터럽트 체인인터럽트 우선순위 레벨을 사용한다.

    여기서는 하드웨어 인터럽트에 관한 설명이지만, 이외에도 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트인 트랩(예외)이 있다. 트랩은 시스템 콜이라는 특수 연산을 실행하여 요청되고 운영체제가 제공하는 서비스가 수행될 것을 요구한다.


    2.2 저장장치 구조 (Storage Structure)

    * CPU는 메모리에서만 명령을 적재할 수 있으므로 프로그램을 실행하려면 먼저 프로그램을 메모리에 적재해야 한다.

    범용 컴퓨터는 프로그램 대부분을 메인 메모리(RAM)이라는 재기록 가능한 메모리에서 가져온다. 하지만 컴퓨터 전원을 켤 때 운영체제를 적재해야 하기 때문에 부트스트랩 프로그램을 실행하는데, RAM은 휘발성이므로 일반적으로 컴퓨터 하드웨어 내에 펌웨어로 저장한다.

     

    모든 형태의 메모리는 바이트의 배열을 저장하고, 각 바이트는 자신의 주소를 가지고 있다. 이때 상호작용은 적재(load), 저장(store) 명령을 통해 이루어진다. 해당 내용에 대한 자세한 내용은 컴퓨터구조 시간에 배운다.

     

    이상적인 메모리는 프로그램과 데이터가 영구히 존재하는 것이지만, 메인 메모리는 휘발성이기도 하고, 모든 프로그램과 데이터를 저장하기엔 너무 작다. 그래서 속도는 느리지만 프로그램과 데이터 모두를 위한 저장소를 제공하는 보조저장장치를 사용한다. 보조저장장치는 대표적으로 하드 디스크 드라이브(HDD)비휘발성 메모리(NVM)을 사용한다.

    이외에도 다른 장치에 저장된 자료의 백업 사본을 저장하기 위해 매우 느리고 충분한 큰 저장장치인 3차 저장장치를 사용하기도 한다.


    2.3 입출력 구조 (I/O Structure)

    * 입출력 구조는 매우 중요하기 때문에 운영체제의 상당 부분이 I/O 관리에 할애된다.

    인터럽트 구동 I/O의 형태는 소량의 데이터를 이동하는데 좋지만, 저장장치 I/O와 같은 대량의 데이터 이동에는 높은 오버헤드를 유발할 수 있다. 그래서 이 문제를 해결하기 위해 직접 메모리 엑세스(DMA)라는 방법으로 장치 제어기에서 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다. 이러면 한 바이트마다 인터럽트가 발생하는 것이 아니라 한 블록마다 인터럽트가 발생하기 때문에 장치 컨트롤러가 전송 작업을 수행하고 있는 동안 CPU는 다른 작업을 할 수 있다.


     

     

     

    3. 컴퓨터 시스템 구조


    3.1 단일 처리기 시스템

    몇 년 전만 하더라도 대부분의 컴퓨터 시스템은 단일 처리 코어를 가진 하나의 CPU를 포함하는 단일 프로세서를 사용했다. 이때 코어명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소이다. 코어를 가진 하나의 메인 CPU는 프로세스의 명령어를 포함하여 범용 명령어 세트를 실행할 수 있다. 단일 처리 코어를 가진 범용 CPU가 하나만 있는 경우 시스템은 단일 프로세서 시스템이라고 부르는데, 현대 컴퓨터는 단일 프로세서 시스템이 거의 없다고 한다.


    3.2 다중 처리기 시스템

    최신 컴퓨터에서는 다중 처리기 시스템이 컴퓨팅 환경을 지배하고 있다. 다중 처리기 시스템은 일반적으로 각각 단일 코어 CPU가 있는 두 개 이상의 프로세스를 말한다.

    다중 처리기 시스템의 장점은 처리량 증가로, 프로세서 수를 늘리면 더 적은 시간에 더 많은 작업을 수행할 수 있다. 그러나 프로세서 수를 늘릴 때마다 같은 비율로 처리량이 증가하지 않는다. 왜냐하면 여러 프로세서가 하나의 작업을 협력하여 수행할 때, 모든 프로세스가 올바르게 작동하게 유지하는데 일정한 양의 오버헤드가 발생하기 때문이다.

     

    일반적인 다중 처리기 시스템은 각 피어(peer) CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 수행하는 SMP(대칭형 다중 처리, symmetric multiprocessing)을 사용한다. SMP 구조의 장점은 성능을 크게 저하하지 않은 상태로 다수의 프로세서를 실행할 수 있다. 하지만 CPU가 독립적이기 때문에 하나는 쉬고 있지만, 하나는 과부하가 걸려 효율적이지 않을 수도 있다. 

     

    현재의 다중 처리기는 여러 개의 컴퓨팅 코어가 단일 칩에 상주하는 다중 코어 시스템을 포함한다. 다중 코어 시스템은 칩 내에서 통신하기 떄문에 단일 코어를 여러개 가져서 칩 간으로 통신을 하는 것보다 효율적일 수 있고, 훨씬 적은 전력을 사용하게 된다.

     

    다중 처리 시스템에 CPU를 추가하면 컴퓨팅 성능이 향상되지만, 너무 많이 추가한다면 시스템 버스에 대한 병목 현상이 되어 성능이 저하되기 시작한다. 이것보다 더 나은 방법은 NUMA(non-uniform memory access)라는 구조인데, CPU에 작고 빠른 로컬 버스를 통해 액세스 되는 자체 로컬 메모리는 제공하고, 모든 CPU가 공유 시스템 연결로 연결되어 하나의 물리 주소 공간을 공유하는 것이다.

     

    NUMA의 장점은 CPU가 로컬 메모리에 엑세스할 때 빠를 뿐만 아니라 시스템 상호 연결에 대한 경합*이 없다는 것이다. 그래서 더 많은 프로세서가 추가될수록 더 효과적으로 확장할 수 있다.

    하지만 단점도 존재하는데, CPU가 시스템 상호 연결을 통해 원격 메모리에 액세스해야 할 때 지연 시간이 증가하여 성능 저하가 발생할 수 있다. 하지만 CPU 스케줄링 및 메모리 관리를 통해 NUMA의 단점을 최소화할 수 있고, 장점 때문에 점점 인기를 얻고 있다.

     

    * 경합: 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도하는 것


    3.3 클러스터형 시스템

    클러스터형 시스템이란 다중 코어 시스템을 노드라고 생각하여 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성하는 시스템이다. 클러스터링은 높은 가용성을 제공하기 위해 사용된다. 그래서 하나 이상의 컴퓨터 시스템이 고장나더라도 서비스는 계속 제공할 수 있다.


     

     

     

    4. 운영체제의 작동


    운영체제는 프로그램이 실행되는 환경을 제공한다. 컴퓨터를 처음에 실행하면 2.2에서 언급했던 부트스트랩 프로그램부터 실행한다. 이때 부트스트랩 프로그램은 운영체제를 적재하는 방법과 해당 시스템 실행을 시작하는 방법을 알아내기 위해 운영체제 커널을 찾아 해당 커널을 메모리에 적재를 하게 된다.

    커널이 적재되어 실행되면 시스템과 사용자에게 서비스를 제공할 수 있느데, 일부 서비스는 커널이 실행되는 전체 시간동안 설행되는 시스템 데몬이 되기 위해 부팅할 때 메모리에 적재되는 시스템 프로그램에 의해 커널 외부에서 제공된다. 이렇게 되면 시스템이 완전히 부팅되고, 시스템은 어떤 이벤트가 발생할 때까지 기다린다.


    4.1 다중 프로그래밍과 다중 태스킹(multiprogramming and multitasking)

    운영체제에서 가장 중요한 특징중 하나는 일반적으로 하나의 프로그램이 항상 CPU나 I/O 장치를 바쁘게 유지할 수 없으므로 여러 프로그램을 실행할 수 있게 하는 것이다.

    다중 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자 만족도를 높인다. 이때 다중 프로그램 시스템에서 실행 중인 프로그램프로세스라고 한다. 운영체제는 여러 프로세스를 동시에 메모리에 유지하고, 이런 프로세스 중 하나를 선택하여 실행하기 시작한다.

     

    다중 태스킹은 다중 프로그래밍의 논리적 확장이라고 생각하면 된다. 다중 태스킹 시스템에서 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만, 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공하게 된다. 이해하기 쉽도록 말하자면 A 프로세스과 B 프로세스가 있을 때, A → B → A → B → ... 순서로 조금씩 프로세스를 실행하여 사용자가 동시에 프로세스를 수행하는 것처럼 보이게 만드는 것이다.

    이렇게 동시에 여러 프로세스를 메모리에 유지하려면 메모리 관리 방식이 필요하고, 여러 프로세스를 동시에 실행할 준비가 되었으면 시스템이 다음에 실행할 프로세스를 선택해야 하는데 이 결정을 내리는 것CPU 스케줄링이다.

    다중 태스킹 시스템에서 운영체제는 적절한 응답 시간을 보장해야 하므로 가상 메모리를 사용한다.


    4.2 이중-모드와 다중모드 운용(Dual-Mode and Multimode Operation)

    운영체제와 사용자는 컴퓨터 시스템의 하드웨어 및 소프트웨어 자원을 공유하기 때문에 운영체제는 잘못된 프로그램으로 인해 다른 프로그램 또는 운영체제 자체가 잘못 실행될 수 없도록 보장해야 한다. 그래서 시스템을 올바르게 실행하기 위해서는 운영체제 코드 실행과 사용자 정의 코드 실행을 구분할 수 있어야 한다.

    그래서 적어도 두 개의 독립된 연산 모드인 사용자 모드커널 모드를 필요로 한다. 그래서 모드 비트(mode bit)라는 하나의 비트가 현재의 모드를 나타내기 위해 하드웨어에 추가되었으며, 이 비트의 값이 1이면 사용자 모드이고, 0이면 커널 모드이다.

    시스템 부트시 하드웨어는 커널 모드에서 시작하여 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다. 이때 트랩이나 인터럽트가 발생할 때마다 하드웨어는 사용자 모드에서 커널 모드로 전환한다. 그러면 운영체제는 컴퓨터의 제어를 얻을 때마다 항상 커널 모드에 있게 된다. 마찬가지로 사용자 프로그램으로 제어를 넘겨야 한다면 그 전에 사용자 모드로 전환을 한다.

     

    이중 모드는 운영체제를 잘못된 사용자로부터 보호하는 방법인데, 악영향을 끼칠 수 있는 일부 명령을 특권 명령으로 지정하여 하드웨어는 특권 명령을 커널 모드에서만 수행되도록 한다. 만약 사용자 모드에서 특권 명령을 수행하려고 하면, 하드웨어는 이것을 실행하지 않고, 불법적인 명령으로 간주하여 운영체제에 트랩을 건다. 그리고 모드의 개념은 두 가지 모드 이상으로 확장되면 그것을 다중 모드라고 한다.

     

    시스템 콜커널 모드의 기능을 사용자 모드에서 사용이 가능하게 프로세스가 하드웨어에 직접 접근해서 사용할 수 있도록 하는 것이다. 시스템 콜이 수행되면 시스템 콜은 하드웨어에 의해 하나의 트랩(소프트웨어 인터럽트)로 취급된다.


    4.3 타이머

    사용자는 운영체제가 CPU에 대한 제어를 유지할 수 있도록 보장해야 한다. 그러기 위해서는 타이머를 사용하게 되는데, 타이머는 지정된 시간 후 컴퓨터를 인터럽트 하도록 설정할 수 있다. 그래서 타이머가 인터럽트를 발생하게 되면 제어는 자동으로 운영체제로 넘어간다. 이때 타이머의 값 조절은 특권 명령이다.


     

     

     

    5. 자원 관리


    5.1 프로세스 관리

    4.1에서 실행 중인 프로그램을 프로세스라고 불렀는데, 프로세스는 CPU에 의해 명령이 실행되지 않으면 아무것도 할 수 없다. 프로세스는 자기 일을 수행하기 위해 여러가지 자원을 필요로 하며, 이러한 자원은 실행하는 동안 할당된다. 이후 프로세스가 종료되면 운영체제는 할당한 자원을 회수하게 된다.

    이때 프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터를 가진 능동적 개체이지만, 프로그램은 저장된 파일의 내용을 가지고 있는 수동적 개체이므로 프로그램 그 자체가 프로세스는 아님을 주의하자.

    한 프로세스는 반드시 순차적으로 수행되어야 하며, 만약 한 프로그램에 두 개의 프로세스가 있어도 각각의 프로세스는 별도의 수행 순서로 간주해야한다. 다중 스레드 프로세스는 여러 개의 프로그램 카운터를 가지고 있고, 이 프로그램 카운터들은 각 스레드가 실행할 다음 명령어를 가리키게 된다.

    한 프로세스는 한 시스템 내의 작업의 단위이다. 그래서 해당 시스템은 프로세스의 집합으로 구성되는데, 프로세스는 운영체제 프로세스와 사용자 프로세스로 나눌 수 있다. 

     

    운영체제는 프로세스 관리와 연관해 다음과 같은 행동에 대한 책임을 진다.

    - 사용자 프로세스와 시스템 프로세스의 생성과 제거

    - CPU에 프로세스와 스레드 스케줄하기

    - 프로세스의 일시 중지와 재수행

    - 프로세스 동기화(Synchronization)를 위한 기법 제공

    - 프로세스 통신(Communication)을 위한 기법 제공


    5.2 메모리 관리

    메모리는 엄청난 범위를 갖는 바이트의 대용량 배열로, 각 바이트는 자신의 주소를 가진다. 이때 메인 메모리(RAM)는 CPU와 입출력 장치에 의해 공유되는 빠른 접근이 가능한 데이터의 저장소이다. 그래서 CPU가 직접 주소를 지정할 수 있고, 직접 값에 접근할 수 있는 유일한 대량 메모리이다.

    4에서 프로그램이 수행되기 위해서는 메모리에 적재를 한다고 했는데, 이때 반드시 절대 주소로 매핑되고 메모리에 적재해야 한다. 이 주소로 메모리의 프로그램 명령어와 데이터에 접근하고, 프로그램이 종료될 때는 프로그램이 차지하던 메모리 공간이 가용 공간으로 선언되어 다음 프로그램이 적재될 수 있다.

    CPU 이용률과 사용자에 대하 컴퓨터의 응답 속도를 개선하기 위해, 메모리에 여러 개의 프로그램을 유지해야 하고 이를 위해서는 메모리 관리 기법이 필요하다. 메모리 관리 기법은 특정 상황에 따라 효율적으로 쓸 수 있는 기법이 있는데 보통 시스템의 하드웨어 설계에 좌우된다.

     

    운영체제는 메모리 관리와 관련하여 다음과 같은 일을 담당해야 한다.

    - 메모리의 어느 부분이 어느 프로세스에 의해 사용되고 있는지에 대한 추적

    - 필요에 따라 메모리 공간을 할당하고 회수해야함

    - 어떤 프로세스들을 메모리에 적재하고 제거할 것인지에 대한 결정


    5.3 파일 시스템 관리

    컴퓨터 시스템의 편리한 사용을 위해, 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다. 그래서 운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 이들 파일에 접근한다.

    파일은 파일 생성자에 의해 정의된 관련 정보의 집합체로 일반적으로 파일은 프로그램과 데이터를 나타낸다. 그리고 파일 관리는 운영체제 구성요소에서 중요한 것중 하나이다. 운영체제는 대량 저장 매체와 그것을 제어하는 장치를 관리하믕로써 파일의 추상적인 개념을 구현하고, 파일은 사용되기 쉽도록 디렉터리들로 구성된다.

     

    운영체제는 파일 관리를 위해 아래 일을 담당한다.

    - 파일과 디렉토리의 생성 및 제거

    - 파일과 디렉토리를 조작하기 위한 프리미티브의 제공


    5.4 대용량 저장장치 관리

    프로그램의 대부분은 메모리에 적재될 때까지 보조저장장치에 저장된다. 이후 프로그램은 장치를 처리 소스 및 대상으로 모두 사용하는데, 보조저장장치의 관리는 컴퓨터 시스템에서 중요하므로 운영체제가 관련 일을 담당하게 된다.


    5.5 캐시 관리

    캐싱은 컴퓨터 시스템의 중요한 원리이다. 정보는 어떤 저장장치에 보관되는데, 정보가 사용됨에 따라 빠른 저장 장치인 캐시에 일시적으로 복사된다. 그래서 우리는 특정 정보가 필요할 경우 먼저 캐시에 해당 정보가 있는지 조사해야 한다. 이때 캐시에 정보가 없으면 캐시보다 느린 메인 메모리에서 정보를 가져와 사용해야 하고, 해당 정보는 곧 다시 사용될 가능성이 높다고 판단하여 캐시에 저장하게 된다.

    CPU 내부의 프로그램 가능한 레지스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있다. 이것을 통해 어느 정보를 레지스터에 둘지 메인 메모리에 둘지 결정하는 레지스터 할당 정책과 교체 알고리즘을 구현한다.

    캐시는 크기가 제한되어 있으므로 캐시 관리는 중요한 문제이다. 그래서 캐시 관리를 어떻게 하냐에 따라 성능이 크게 향상될 수 있다.

    참고로 하드웨어로 구현된 캐시도 존재 하는데, 이것은 운영체제로 제어할 수 없다.

     

     

    그리고 데이터는 원래 캐시에 있는 것이 아니라 위 그림처럼 저장장치에 있다가 캐시에 복사되어 오는 것이기 때문에, 같은 값을 여러번 참조하여 값을 변경하는 경우에는 해당 값이 여러 개의 캐시에 서로 다른 값으로 존재할 수도 있다. 그래서 한 캐시에 있는 값이 갱신될 경우 다른 모든 캐시에 즉각적으로 반영되어야 하는데, 이것을 캐시 일관성 문제라고 한다. 이것은 운영체제보다는 하드웨어쪽 문제이다.


     

     

    * 컴퓨터 구조 수업에서 배운 내용들이 많이 생각난다.

    반응형

    댓글

Designed by Tistory.