반응형

안녕하세용가리

오늘은 물리 메모리와 가상 메모리에 대해 알아볼건데요.

운영체제의 메모리 관리 기법(페이징, 세그멘테이션)을 알기 위해선 이걸 먼저 알아야 합니다.

그러니까 바로 가봅시다 ㄱㄱ싱


물리 메모리, 가상 메모리

RAM보다 큰 용량의 프로세스는 어떻게 실행되는 걸까요? 고민해본 적이 있으신가요?

바로 운영체제가 메모리를 효율적이고, 더 많은 용량을 쓰고자 하기 위해 물리 메모리와 가상메모리를 나눴기 때문입니다.

물리 메모리와 가상 메모리는 컴퓨터의 메모리 관리에서 중요한 개념입니다.

각각 무슨 역할을 하는지 알아봅시다.


물리 메모리 (Physical Memory)

프로세스가 실행되려면 메인메모리, 즉 RAM에 할당이 되어야 합니다. 물리 메모리는 실제 하드웨어 메모리인 RAM을 의미합니다. CPU는 직접적으로 물리 메모리에 접근해 데이터를 읽고 쓰게 됩니다.

  • 특징
    • 제한된 메모리 용량때문에 여러 프로그램을 동시에 실행려면 물리 메모리만으로는 부족한 경우가 있습니다.
    • 물리메모리는 CPU가 직접 접근 하기 때문에 속도가 매우 빠릅니다.

가상 메모리 (Virtual Memory)

가상 메모리는 디스크 저장 공간(HDD, SSD)의 일부를 실제 물리 메모리처럼 사용하기 위해 만들어진 메커니즘입니다. 이를 통해 제한된 물리 메모리의 크기에 제약을 받지 않고, 더 큰 주소 공간을 사용할 수 있습니다. 각 프로세스들은 자신만의 가상 메모리 공간을 가지게 됩니다.

  • 특징
    • 실제 물리 메모리보다 큰 메모리 공간을 사용할 수 있게 하여, 메모리 효율성을 높일 수 있습니다.
    • 각 프로세스 메모리에 대해 독립적인 권한을 부여하여 메모리의 안정성을 높일 수 있습니다.

가상 메모리(Virtual Memory)와 가상 주소(Virtual Address)

가상 메모리와 가상 주소는 의미 차이가 있습니다.

  • 가상 메모리각 프로세스에 자신만의 독립적인 가상 주소 공간을 제공하여 프로세스들이 필요한 메모리 이상을 사용하게 하는 기술적 개념입니다.
  • 가상 주소는 논리 주소라고도 불리며, 프로세스의 가상 메모리에서 특정 위치에 접근할 때 사용하는 주소입니다. 가상 주소는 페이지 번호와 페이지 오프셋으로 구성되어있습니다. 

 

반응형

'프로그래밍 > CS' 카테고리의 다른 글

[CS] MMU, TLB  (0) 2024.11.04
[CS] 세그멘테이션  (0) 2024.11.04
[CS] 페이징(Paging)  (0) 2024.10.22
[CS] PCB와 ContextSwitching  (2) 2024.10.22
[CS] 인터럽트  (0) 2024.10.22
반응형

안녕하세요?

오늘은 프로세스 메모리 관리 기법인 페이징에 대해서 알아볼건데요.

바로 알아봅시다 ㄱㄱ싱


페이징(Paging)

페이징(Paging)은 운영체제의 가상 메모리 시스템에서 사용하는 메모리 관리 기법중 하나로, 메모리를 일정한 크기로 나눈 단위인 페이지와 프레임을 통해하는 메모리를 관리하는 방식입니다. 페이지와 프레임은 페이지 테이블을 통해 매핑하여 사용합니다. 이로 인해 메모리 단편화 문제를 줄이고, 프로세스가 사용하는 메모리 영역을 효율적으로 관리할 수 있습니다.

이제 페이징 기법에 대해서 알아보겠습니다.


페이지(Pages)와 프레임(Frame)

페이징은 메모리를 일정한 크기로 나눈 메모리의 단위입니다.

페이지와 프레임은 다음과 같은 특징을 가지고 있습니다.

참고 사이트: 페이지 (컴퓨터 메모리) - 위키백과, 우리 모두의 백과사전


페이지

페이지(Page)는 가상 메모리를 효율적으로 관리하기 위해  일정한 크기로 나눈 메모리의 단위입니다.

  • 특징
    • 가상 메모리에서 각각의 페이지는 연속된 가상 주소 공간을 가지고 있습니다.
    • 페이지의 크기는 주로 4KB(외에 8KB, 16KB), 2MB(큰 페이지) 등으로 고정되어 있습니다.
    • CPU가 메모리에 접근할 때 페이지 단위로 물리 메모리와 디스크를 교체하며 사용합니다.
    • 각 페이지는 속성을 가질 수 있습니다.

프레임

프레임(Frame)은 물리 메모리를 일정한 크기로 나눈 메모리의 단위입니다.

  • 특징
    • 프레임은 실제 메모리상의 위치를 나타냅니다.
    • 프레임은 페이지를 통해 매핑되기 때문에 페이지와 크기가 동일합니다.

페이지 테이블(Pages Table)

페이지 테이블은(Page Table)은 페이지와 프레임을 매핑하여 가상 주소를 물리 주소로 변환하기 위해 만든 테이블(자료구조)입니다. 페이지 테이블은 페이지 테이블 엔트리라는 항목을 통해 필요한 매핑 정보를 저장하고 있습니다.

참고 사이트: 페이지 테이블 - 위키백과, 우리 모두의 백과사전


페이지 테이블 엔트리(Pages Table Entry)

페이지 테이블 엔트리는 페이지의 가상 주소와 프레임 주소간의 매핑정보를 보유하고 있습니다. 또한 플래그 비트를 통해 수정 여부, 액세스 권한 등의 속성을 부여할 수 있습니다.

페이지 테이블 엔트리는 다음과 같은 항목을 포함하고 있습니다.

  • 페이지번호(Page Number):
    • 가상 주소 공간에서 페이지의 위치를 나타내는 번호입니다. (가상 주소를 페이지 크기(예: 4KB)로 나눈 값)
    • 가상 주소를 물리 주소로 변환할 때, 페이지 테이블에서 가상 주소와 물리 메모리 간의 매핑을 찾기 위한 키(key) 역할을 합니다.
  • 프레임 번호(Frame Number):
    • 가상 메모리의 페이지가 매핑된 물리 메모리의 프레임 번호를 나타냅니다.
    • 가상 주소의 페이지 번호를 물리 주소의 프레임 번호로 변환하는 데 사용됩니다.
  • 유효 비트(Present or Valid Bit):
    • 현재 페이지가 물리 메모리에 적재되어 있는지 여부를 나타냅니다.
    • 유효 비트가 0이면 해당 페이지가 디스크(가상 메모리)로 스왑되어 있다는 의미입니다. 이 경우 페이지 폴트가 발생하여 해당 페이지를 물리 메모리로 로드하게 됩니다.
      • 1 (유효): 해당 페이지가 현재 물리 메모리에 있음을 의미합니다.
      • 0 (무효): 해당 페이지가 현재 물리 메모리에 존재하지 않고, 디스크의 스왑 영역에 있음을 의미합니다.
  • 수정 비트(Dirty Bit):
    • 페이지가 마지막으로 물리 메모리에 적재된 이후 수정되었는지를 나타냅니다.
    • 수정 비트가 1로 설정된 경우, 페이지가 스왑 아웃될 때 디스크에 변경된 내용을 다시 저장해야 합니다.
  • 접근 비트(Accessed Bit):
    • 페이지가 최근에 접근되었는지를 나타냅니다.
    • 운영체제가 페이지 교체 알고리즘을 사용할 때 **LRU(Least Recently Used)**와 같은 방식으로 자주 사용되지 않는 페이지를 선택하는 데 유용합니다.
  • 읽기/쓰기/실행 권한(Read/Write/Execute Permissions):
    • 페이지의 접근 권한을 정의합니다.
    • 특정 페이지에 대해 읽기, 쓰기, 실행 권한을 각각 설정하여 메모리 보호를 구현할 수 있습니다. 예를 들어, 코드 페이지는 읽기와 실행 권한만 허용하고 쓰기는 금지할 수 있습니다.

 


페이지 폴트(Pages Fault)

페이지 폴트는 데이터의 가상주소를 통한 물리 메모리에 접근하려 했으나, 물리 메모리가 존재하지 않는 경우를 말합니다. "이러면 에러가 나야하는거 아니냐?" 하실 수도 있습니다. 하지만 이건 당연히 일어나야 현상입니다.

대체 어떻게 에러가 아닌 걸까요. 한번 알아봅시다.


페이지 폴트가 생기는 이유

페이지 폴트가 생기는 이유는 앞서 설명한 물리 메모리와 가상 메모리의 특성 때문입니다.

OS는 물리 메모리의 부족한 용량을 보완하기 위해 가상 메모리라는 시스템을 통해 메모리를 관리합니다.

 

물리 메모리는 사용자가 필요로 하는 메모리를 실질적으로 사용하는 공간입니다.

가상 메모리는 사용자가 당장 필요하지 않은 메모리를 외장 디스크(HDD, SSD)에 메모리 정보를 저장해놓습니다.

 

예시를 한번 들어보겠습니다.

  • 페이지 A, B, C 3개가 있습니다. 근데 RAM의 용량이 부족해 2개의 페이지까지만 RAM에 할당할 수 있습니다.
  • 때문에 RAM에 A, B의 메모리가 올라와있고, 가상 메모리에 C를 저장하고 있다고 가정해보겠습니다.
  • 프로세스가 페이지C에 있는 데이터를 필요로 하고, 페이지A가 필요가 없어졌습니다.
  • 하지만 페이지C는 RAM에 올라와있지 않기 때문에 페이지 폴트가 발생합니다.
  • 이 때, OS는 스와핑(Swaping)을 통해 페이지 A를 디스크로 내보내고, 페이지C를 디스크에서 메모리로 불러옵니다.

페이지 폴트는 이 과정을 통해 처리됩니다.

 


스와핑(Swapping)

스와핑은 사용하지 않는 페이지를 물리 메모리(RAM)에서 가상 메모리 공간(디스크)으로 내보내고, 필요한 페이지를 물리 메모리로 불러오는 과정을 말합니다.

물리 메모리로 로드하는 경우를 스왑 인(Swap In)이라고 하고, 

스왑 영역으로 내보내는 경우를 스왑 아웃(Swap Out)이라고 합니다.


스와핑이 발생하는 경우

스와핑이 발생하는 경우는 일반적으로 다음과 같습니다.

  1. 컴퓨터의 물리 메모리가 부족하면, 사용되지 않는 페이지를 디스크의 스왑 영역(swap space)으로 옮겨 물리 메모리의 공간을 확보합니다.
  2. 사용자가 특정 데이터를 요청할 때, 해당 페이지가 물리 메모리에 없는 경우 이를 디스크에서 다시 불러와 메모리에 적재합니다.

 

 

스와핑의 과정

스와핑이 일어나는 과정은 일반적으로 다음과 같습니다.

  1. 제거할 페이지 선택:
    • 운영체제는 메모리에서 제거할 페이지를 선택합니다. 보통 최근에 사용되지 않은 페이지가 선택되며, 이를 위해 LRU(Least Recently Used) 등의 페이지 교체 알고리즘을 사용합니다.
  2. 해당 페이지를 스왑 영역으로 이동:
    • 선택된 페이지를 스왑 영역으로 이동시키며, 해당 페이지가 저장된 디스크 위치를 기록합니다.
    • 동시에 페이지 테이블의 해당 페이지 항목(유효 비트)을 수정하여 이 페이지가 스왑 영역에 있음을 표시합니다.
  3.  필요한 페이지를 로드
    • 필요한 페이지를 물리 메모리로 로드합니다.
    • 이 때도 페이지 테이블의 해당 페이지 항목(유효 비트)을 수정하여 이 페이지가 물리 메모리 영역에 있음을 표시합니다.

이 과정에서 물리 메모리와 디스크 간의 데이터 이동이 발생하는데, 이에 대한 단점도 있습니다.


스와핑의 장단점

스와핑을 통해 얻을 수 있는 장단점은 다음과 같습니다.

●장점

  1. 메모리를 효율적으로 사용할 수 있습니다.
  2. 물리 메모리의 제약 없이 여러 프로세스를 동시에 실행할 수 있게 합니다.
  3. 용량이 큰 프로그램의 메모리 요구량을 수용할 수 있게 해줍니다.

●단점

  1. 가상 메모리의 스왑 영역은 보조 기억 장치에 존재하기 때문에 접근 속도가 매우 느립니다. 때문에 스와핑이 자주 발생하면 성능 저하가 발생할 수 있습니다.
  2. 때문에 빈번한 스와핑은 디스크 입출력 비용을 증가시키며, 심한 경우 스래싱(thrashing)이라는 현상이 발생할 수 있습니다. (RAM의 용량이 요구량보다 적을 경우 발생합니다,)

스래싱(Thrashing)

스래싱은 페이지 교체가 너무 빈번해지면서 CPU가 실제 연산보다는 페이지 교체 작업에 대부분의 시간을 소비할 때 발생합니다.

페이지 폴트가 자주 발생할 경우 스와핑이 자주 발생하게 되는데, 이 때 프로세스의 작업 시간을 대부분 스왑 작업에 사용하여 실질적인 프로세스의 연산에 필요한 자원이 거의 할당되지 않습니다. 결국 연산이 거의 이루어지지 않기 때문에 시스템 전체 성능이 크게 저하됩니다.

때문에 스래싱이 발생하면 CPU 사용률이 떨어지고, 전체 시스템의 처리 성능이 낮아집니다.


페이의 내부 단편화에 대해

운영체제는 외부 단편화 현상을 막기 위해 페이징 기법을 사용해서 효율적으로 메모리를 사용하도록 설계되어 있는걸 알았습니다. 하지만 페이지도 결국 메모리를 고정된 크기로 나눈 단위이기 때문에, 페이지 내에서의 내부 단편화가 생길 수 있습니다.

예를 들어, 페이지 크기가 4KB인 시스템에서 어떤 데이터가 6KB의 메모리를 필요로 한다면, 두 개의 페이지(총 8KB)가 할당됩니다. 이 경우 마지막 페이지의 남는 2KB는 사용되지 않는 메모리 공간이 되어 내부 단편화가 발생합니다.

 

아래 사진은 내부 단편화에 대해 간단하게 보여줍니다.

사진처럼 페이지중 일부 공간은 사용하지 않을 수 있다.

 


내부 단편화의 특징

내부 단편화의 특징은 다음과 같습니다.

  • 크기가 클수록 내부 단편화 증가: 페이지 크기가 클수록 남는 공간이 더 많아질 수 있습니다. 따라서 4KB 페이지보다는 8KB 페이지 크기를 사용할 때 더 큰 내부 단편화가 발생할 가능성이 있습니다.
  • 프로세스와 페이지 크기 불일치: 각 프로세스의 메모리 요구량이 페이지 크기와 맞지 않을 때, 할당된 마지막 페이지의 남은 부분이 내부 단편화를 일으킵니다.

내부 단편화 해결 방법

내부 단편화를 해결할 수 있는 방법이 있습니다. 바로 페이지 크기를 작게 설정하는 것인데요. 페이지의 크기를 줄이면 얻을 수 있는 장단점이 있습니다.

  • 장점: 페이지 크기를 줄임으로써 미사용 공간의 낭비가 적어져 내부 단편화가 줄어듭니다.
  • 단점: 페이지가 많아지면 페이지 테이블의 크기도 함께 증가하므로 성능상 오버헤드가 커질 수 있습니다.

 

반응형

'프로그래밍 > CS' 카테고리의 다른 글

[CS] 세그멘테이션  (0) 2024.11.04
[CS] 물리 메모리와 가상 메모리  (0) 2024.11.04
[CS] PCB와 ContextSwitching  (2) 2024.10.22
[CS] 인터럽트  (0) 2024.10.22
[CS] CPU 스케줄링  (4) 2024.10.21
반응형

안녕하세요구르트

이번 포스팅은 [CS] 프로세스와 스레드 :: #공부중 (tistory.com)에서 아주 간략하게 다룬 PCB와 Context Switching에 대해 좀 더 자세히 다뤄보겠습니다.


PCB란 무엇인가

PCB(Process Control Block)는 프로세스가 생성될 때 운영체제에 의해 생성되는 것으로, 생성된 프로세스에 대한 메타데이터를 저장하고 있습니다. PCB는 프로세스의 중요한 정보를 포함하고 있기 때문에 유저 영역에서 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리됩니다.


●PCB의 구조

 

  • 프로세스 식별자 (PID: Process ID)
    각 프로세스를 유일하게 구분하기 위한 고유 식별자입니다.
  • 프로세스 상태 (Process State)
    프로세스가 현재 어떤 상태에 있는지 나타냅니다. 프로세스는 다음과 같은 상태 중 하나에 있을 수 있습니다:
    • New: 프로세스가 생성되었지만 아직 실행되지 않음.
    • Running: 프로세스가 CPU에서 실행 중임.
    • Waiting (Blocked): 프로세스가 어떤 이벤트(입출력 등)를 기다리는 중임.
    • Ready: 프로세스가 실행 준비 상태이며, CPU를 사용할 수 있기를 기다리는 중임.
    • Terminated: 프로세스가 실행을 마치고 종료된 상태임.
  • 프로그램 카운터 (Program Counter)
    다음에 실행할 명령어의 주소를 저장합니다. 문맥 교환이 발생할 때 이 값을 이용해 이전 프로세스의 상태를 복구할 수 있습니다.
  • CPU 레지스터 상태
    문맥 교환을 할 때, CPU 레지스터의 내용을 저장하고 복구하는 데 사용됩니다. 이를 통해 중단된 프로세스가 나중에 재개될 때 이전 상태를 유지할 수 있습니다.
  • 메모리 관리 정보
    프로세스의 메모리 공간과 관련된 정보들을 담고 있습니다. 예를 들어, 페이지 테이블, 세그먼트 테이블, 메모리 한계 레지스터 등이 포함될 수 있습니다.
  • 프로세스 상태 (Process State)
    프로세스의 실행 중, 대기 중, 종료 상태 등 프로세스의 현재 상태에 대한 정보입니다.
  • 계정 정보 (Accounting Information)
    CPU 사용 시간, 프로세스의 우선순위, 실행된 시스템 호출 수 등 프로세스의 성능 및 자원 사용에 관한 정보입니다.
  • 입출력 상태 정보 (I/O Status Information)
    프로세스가 사용하는 입출력 장치, 열려 있는 파일 목록, 입출력 요청 큐 등의 정보를 담고 있습니다.

●PCB의 역할

운영체제는 PCB를 사용해서 여러 프로세스를 관리할 수 있습니다. CPU의 각 코어는 여러 프로세스를 동시에 처리할 수 없기 때문에 짧은 시간동안 여러 프로세스를 하나씩 빠르게 처리하게 되는데요, 프로세스의 전환 과정에서 다음 프로세스의 정보를 읽어와야 작업을 진행할 수 있기 떄문에 프로세스의 정보, 즉 PCB를 필요로 합니다. 


Context Switching란 무엇인가

컨텍스트 스위칭은 운영체제(OS)에서 현재 실행 중인 작업의 상태(context)를 저장하고, 다른 작업의 상태를 복원하여 실행을 전환하는 과정을 말합니다. 운영체제에서 하는 작업이기 때문에 당연히 커널영역으로의 전환이 이루어집니다.

프로세스나 스레드와의 전환만이 컨텍스트 스위칭이 일어난다고 생각하실 수도 있는데, 뿐만 아니라 여러 상황에서 이루어집니다.


●Context Switching이 일어나는 상황

컨텍스트 스위칭은 여러 상황에서 일어날 수 있습니다. 대표적인 4가지 경우가 있는데요.

  • 프로세스 전환: 하나의 프로세스가 실행 중일 때, OS가 다른 프로세스로 전환해야 하면, 현재 프로세스의 상태를 저장하고 다른 프로세스의 상태를 불러와 실행합니다.
  • 스레드 전환: 멀티스레드 환경에서, 하나의 스레드에서 다른 스레드로 전환할 때도 컨텍스트 스위칭이 일어납니다.
  • 시스템 호출: 프로그램이 시스템 리소스에 접근하기 위해 커널 모드로 전환하는 순간에도 컨텍스트 스위칭이 발생합니다. 이때는 사용자 모드에서 커널 모드로, 다시 커널 모드에서 사용자 모드로 돌아가는 과정에서 전환이 이루어집니다.
  • 인터럽트 처리: 외부 장치나 타이머 등에서 인터럽트가 발생하면, 현재 작업의 상태를 저장하고 인터럽트 핸들러로 전환되면서도 컨텍스트 스위칭이 일어날 수 있습니다.

●Context Switching에서 다루는 정보

컨텍스트 스위칭에서 다루는 정보들은 뭐가 있을까요? GPT쌤한테 물어봤습니다.

더보기

1. 프로그램 카운터 (Program Counter)

  • 역할: 현재 실행 중인 명령어의 위치를 저장.
  • 설명: 프로세스 또는 스레드가 멈췄던 지점에서 다시 실행을 재개하려면, 중단된 지점의 명령어 위치를 정확히 알아야 해. 프로그램 카운터는 이 위치 정보를 저장하고 있기 때문에, 이를 복원하여 다음 실행 지점에서부터 이어서 실행할 수 있어.

2. CPU 레지스터 (CPU Registers)

  • 역할: 연산 중인 데이터와 결과 값을 저장.
  • 설명: 프로세스나 스레드가 작업 중에 CPU 레지스터에는 여러 변수 값이나 중간 계산 결과가 담겨 있어. 컨텍스트 스위칭 시에 이 레지스터의 값을 저장하고, 전환된 작업의 레지스터 값을 복원하여 이어서 연산을 수행할 수 있도록 해.

3. 스택 포인터 (Stack Pointer) 및 프레임 포인터 (Frame Pointer)

  • 역할: 함수 호출의 스택 정보와 지역 변수를 관리.
  • 설명: 함수 호출 시 함수의 실행 정보를 스택에 쌓고, 함수가 끝나면 스택에서 꺼내는 구조야. 스택 포인터는 현재 스택의 최상단 위치를 가리키고, 프레임 포인터는 특정 함수 호출의 시작 지점을 가리켜. 이 정보가 저장되고 복원됨으로써 함수 호출이 끊김 없이 연결될 수 있어.

4. 메모리 관리 정보 (Memory Management Information)

  • 역할: 프로세스의 메모리 맵 및 페이지 테이블 정보를 관리.
  • 설명: 프로세스마다 사용하는 메모리 주소 공간이 다르기 때문에, 커널은 프로세스 전환 시 해당 프로세스의 가상 메모리 맵과 페이지 테이블을 관리해. 이를 통해 해당 프로세스가 접근해야 하는 메모리 자원을 올바르게 연결해줄 수 있어.

5. 프로세스 상태 (Process State)

  • 역할: 프로세스가 현재 어떤 상태에 있는지를 저장.
  • 설명: 프로세스는 실행 상태, 준비 상태, 대기 상태 등 다양한 상태를 가질 수 있어. 이 정보는 커널이 프로세스를 정확한 상태로 전환하고 처리할 수 있도록 해주는 중요한 정보야.

6. 파일 디스크립터 테이블 (File Descriptor Table)

  • 역할: 프로세스가 열어둔 파일의 정보와 네트워크 소켓 등을 관리.
  • 설명: 프로세스는 실행 중에 파일이나 소켓 같은 리소스를 열어 사용할 수 있어. 이러한 파일 디스크립터 정보는 전환된 프로세스에서도 동일하게 유지되어야 하기 때문에, 커널은 이 정보를 저장하고 복원해.

7. 입출력 상태 (I/O State)

  • 역할: 프로세스가 대기 중인 입출력 작업의 상태 정보를 관리.
  • 설명: 만약 프로세스가 어떤 입출력 작업(예: 파일 읽기/쓰기, 네트워크 통신 등)을 기다리는 상태라면, 커널은 해당 작업이 어느 단계에 있는지 그 상태를 기록하고 있어. 이를 통해 나중에 다시 프로세스를 복원할 때 그 입출력 작업을 이어서 수행할 수 있게 해.

8. 특권 레벨 (Privilege Level)

 

  • 역할: 프로세스가 사용자 모드인지, 커널 모드인지를 저장.
  • 설명: 시스템 호출이나 인터럽트가 발생할 때, CPU는 사용자 모드에서 커널 모드로 전환돼. 이 특권 레벨 정보가 정확하게 유지되어야 올바른 권한으로 작업을 수행할 수 있어.

 


●각 상황마다의 Context Switching

컨텍스트 스위칭은 작업의 전환이란 큰 틀에선 똑같지만, 상황에 따라 다루는 정보들이 달라집니다.

각각의 상황에서 커널이 어떤 정보를 읽고 저장하는지 알아봅시다.

1. 프로세스 전환 (Process Switching)

  • 읽는 정보: 프로세스는 독립된 실행 단위이기 때문에 상태를 완전히 저장하고 복원해야 합니다.
    • 프로그램 카운터 (Program Counter): 프로세스가 중단된 위치.
    • CPU 레지스터 (CPU Registers): 프로세스에서 사용 중이던 모든 레지스터 값.
    • 스택 포인터 (Stack Pointer) 및 프레임 포인터 (Frame Pointer): 프로세스의 함수 호출 및 지역 변수 상태.
    • 메모리 관리 정보 (Memory Management Information): 가상 메모리 주소 공간, 페이지 테이블 정보.
    • 프로세스 상태 (Process State): 실행 상태, 준비 상태, 대기 상태 등의 현재 상태.
    • 파일 디스크립터 테이블 (File Descriptor Table): 프로세스가 열어 둔 파일 및 소켓 정보.
    • 입출력 상태 (I/O State): 프로세스가 기다리고 있는 입출력 작업의 상태.

프로세스 전환은 완전히 다른 메모리 주소 공간과 자원을 사용하는 독립적인 작업을 전환하는 것이기 때문에, CPU 레지스터 및 메모리 관련 정보 전부를 저장 및 복원해야 합니다.

2. 스레드 전환 (Thread Switching)

  • 읽는 정보: 스레드는 같은 프로세스 내에서 실행되므로 프로세스의 정보는 공유되지만, 스레드 고유의 정보는 저장 및 복원해야 합니다.
    • 프로그램 카운터 (Program Counter): 스레드가 중단된 지점.
    • CPU 레지스터 (CPU Registers): 스레드에서 사용 중이던 레지스터 값.
    • 스택 포인터 (Stack Pointer) 및 프레임 포인터 (Frame Pointer): 스레드의 호출 스택 상태.

스레드는 프로세스 내에서 실행되기 때문에 메모리 관리 정보와 파일 디스크립터 테이블은 공유합니다. 그래서 프로세스 전환보다는 상대적으로 적은 양의 정보를 저장하고 복원하지만, CPU 상태와 스택 정보는 개별적으로 관리해야 합니다.

3. 시스템 호출 (System Call)

  • 읽는 정보: 시스템 호출은 사용자 모드에서 커널 모드로 전환될 때 발생하는데, 이때는 사용자 모드에서 커널 모드로 전환하는 정보만 필요합니다.
    • 프로그램 카운터 (Program Counter): 사용자 모드에서 커널 모드로 전환되기 직전의 위치.
    • CPU 레지스터 (CPU Registers): 현재 사용 중이던 레지스터 값.
    • 스택 포인터 (Stack Pointer): 커널 모드에서 사용할 새로운 스택.
    • 특권 레벨 (Privilege Level): 사용자 모드에서 커널 모드로 전환하는 권한 정보.

시스템 호출은 같은 프로세스 내에서 일어나는 일이기 때문에, 메모리 관리 정보나 파일 디스크립터는 변경되지 않고 그대로 유지됩니다. 사용자 모드에서 커널 모드로 전환되기 위한 최소한의 상태 정보만 저장하고 복원합니다.

4. 인터럽트 처리 (Interrupt Handling)

  • 읽는 정보: 인터럽트는 외부 사건에 의해 발생하며, 현재 작업을 잠깐 중단하고 인터럽트 처리 루틴으로 전환하는 것이기 때문에 비교적 적은 정보를 저장합니다.
    • 프로그램 카운터 (Program Counter): 인터럽트 발생 시점의 명령어 위치.
    • CPU 레지스터 (CPU Registers): 작업 중이던 레지스터 값.
    • 특권 레벨 (Privilege Level): 인터럽트가 발생할 때, 커널 모드로의 전환 여부.

인터럽트는 매우 짧은 시간 동안 실행되기 때문에 메모리 관리 정보나 입출력 상태는 그대로 유지되고, 필요한 정보만 빠르게 저장하고 원래 작업으로 복원합니다.


 

반응형

'프로그래밍 > CS' 카테고리의 다른 글

[CS] 물리 메모리와 가상 메모리  (0) 2024.11.04
[CS] 페이징(Paging)  (0) 2024.10.22
[CS] 인터럽트  (0) 2024.10.22
[CS] CPU 스케줄링  (4) 2024.10.21
[CS] CPU의 메모리 계층 구조  (4) 2024.10.13

+ Recent posts