페이지 교체 알고리즘이란?

• 가상 메모리는 요구 페이지 기법을 통해 필요한 페이지만 메모리에 적재하여 사용한다.

• 하지만 필요한 페이지만 올려도 메모리는 결국 차게 되고, 올라와있던 페이지가 다 사용된 후 자리만 차지하고 있을 수도 있다.

    즉 메모리가 가득 차면 안쓰는 페이지는 out 하고, 필요한 페이지는 in 시켜야 한다.

• 이 때 효율적인 페이지 교체를 위해 고안된 방법이 바로 페이지 교체 알고리즘이다.

• 프로세스와 운영체제의 경향에 알맞은 알고리즘을 선택하여 사용하는것이 좋다.


FIFO (First-in First-out)

• 메모리에서 내보낼 페이지를 선택할 때, 메모리에 먼저 올라온 페이지 순서대로 내보내는 방법

• 가장 간단한 방법이며, 특히 초기화 코드에 적절한 알고리즘이다.

    ◦  초기화 코드란? : 프로세스가 처음 실행될 때 최초 초기화를 수행하는 역할의 코드


OPT (Optimal)

• 앞으로 가장 사용하지 않을 예정인 페이지를 가장 우선적으로 내보내는 알고리즘

• FIFO에 비해 페이지 결함의 발생 횟수를 많이 감소시킬 수 있다.

    ◦  페이지 결함 : 메모리에 페이지가 올라와 있지 않아 페이지 적재가 필요한 상황

• 미래에 어떤 페이지가 사용되는지의 여부를 예측할 수 없기 때문에(앞으로 가장 사용하지 않을 예정인 페이지가 무엇인지 알 수 없음)
    이론적으로만 가능한 알고리즘이다.


LRU (Least-Recently-Used)

• 최근에 사용하지 않은 페이지를 가장 먼저 내려보내는 알고리즘

    ◦  최근에 사용하지 않은 페이지는 앞으로도 사용하지 않을 확률이 높다는 논리

• OPT의 경우 미래 예측이지만, LRU의 경우는 과거를 보고 판단하므로 실질적인 구현이 가능하다.

• OPT 보다 페이지 결함이 더 많이 발생할 수 있지만, 구현 가능한 페이지 교체 알고리즘 중에서는 가장 좋다.


LFU (Least-Frequently-Used)

• 페이지의 참조 횟수로 교체할 페이지를 선택하는 알고리즘

• 누적 참조 횟수가 가장 낮은 페이지를 우선적으로 내보낸다.

    ◦ 가장 적게 참조된 페이지는 앞으로도 사용되지 않을 확률이 높다는 논리

    ◦ 누적 참조 횟수가 동일한 페이지끼리는 가장 오랫동안 사용되지 않은 페이지가(LRU) 우선적으로 제거된다.

• LRU는 참조된 시점을 고려하지만, LFU는 참조 횟수를 고려하기 때문에 더 과거의 참조성향까지 고려할 수 있다.

 단점

    ◦  가장 최근에 참조된 페이지가 교체될 수 있다. (최근에 참조된 페이지일수록 앞으로 더 많이 참조될 가능성이 있는데 말이다)

    ◦  구현이 LRU보다 더 복잡하고 오버헤드가 발생할 수 있다.


MFU (Most-Frequently-Used)

• 마찬가지로 페이지의 참조 횟수를 활용하는 알고리즘
• LFU와 반대로, 누적 참조 횟수가 가장 높은 페이지를 우선적으로 내보낸다.

    ◦ 가장 많이 참조된 페이지는 앞으로 사용되지 않을 확률이 높다는 논리 (충분히 쓸만큼 쓴 페이지일 것이다)


참고자료

 

[운영체제] 페이지 교체 알고리즘 (FIFO/OPT/LRU/LFU/MFU)

페이지 교체 알고리즘 (Page Replacement Algorithm) 이전 포스팅으로 요구 페이징(Demand Paging)에 대해 알아보았다. 필요한 페이지가 메모리에 없을 때 page-falut가 발생하고 Backing Store에서 해당 페이지를..

code-lab1.tistory.com

 

가상 메모리란?

• 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다.

    ◦  가상 메모리를 사용하면 물리적 메모리 공간보다 큰 프로세스를 수행할 수 있다.

    ◦  예) 100MB 메모리 공간에서 200MB 크기의 프로세스를 수행할 수 있음

 

• 어떻게 가능한가?

    ◦  프로세스를 실행할 때 프로세스 전체가 아닌, 실행에 필요한 일부(페이지 단위)만 메모리에 올린다.

    ◦  이를 Demanding Paging 기법이라고 한다. (현재 필요한 페이지만 메모리에 올리는 것)

 

• 운영 체제는 물리 메모리의 제약을 갖고 있는 주기억장치를 보조하기 위해 디스크를 보조기억장치(Paging Space)로 사용한다.

    ◦  주기억장치와 보조 기억 장치를 묶어 하나의 가상 메모리를 구현한다.

    ◦  프로세스는 할당 받은 메모리가 실제 메모리인지, Swap 영역인지 모른다.

    ◦  Swap 영역은 실제 메모리가 아니기 때문에 지연시간이 발생하므로 가급적이면 사용하지 않는 것이 좋다.

         만약 Swap 영역의 사용일 계속해서 증가한다면 메모리 누수를 의심해 봐야 한다.

 

• 가상 메모리 사용의 장점

    ◦  더 많은 프로그램을 동시에 수행할 있어 CPU 이용률과 처리율이 높아진다.

    ◦  프로그래머는 메모리 크기에 관한 문제를 염려할 필요 없이 쉽게 프로그램을 작성할 수 있다.

    ◦  프로그램을 교체할 때 발생하는 메모리 교체 성능 문제를 최소화할 수 있다.

 

• 이런 가상 메모리 기법은 불연속 할당 기법인 페이징과 세그멘테이션 기법에 활용할 수 있다.


페이징 기법

페이징 테이블과 메모리

• 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식

 

• 단순 페이징

    ◦  각 프로세스를 일정한 길이의 페이지로 나눈다. 이 때 페이지의 길이는 프레임과 같은 길이가 되도록 한다.

         -  페이지 : 고정 사이즈의 가상 메모리 내 프로세스 조각

         -  프레임 : 페이지 크기와 같은 주 기억 장치의 메모리 조각

    ◦  외부 단편화 (발생 X), 내부 단편화 (발생 O)

 

• 가상 메모리를 활용한 페이징

    ◦  단순 페이징과 달리 프로세스 페이지 전부를 로드할 필요가 없다.

         -  필요한 페이지가 있으면 나중에 자동으로 불러온다.

    ◦  복잡한 메모리 관리로 인한 오버헤드 발생할 수도 있다.

 

장점

    ◦  논리 메모리가 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에

         외부 단편화가 생기지 않는다.

 

단점

    ◦  내부 단편화 문제가 발생할 수 있다. 페이지 단위를 작게하면 해결할 수 있지만, 페이지 매핑 과정이 복잡해져 비효율적이다.


세그멘테이션 기법

세그멘테이션 테이블과 메모리

• 세그멘트 : 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것

• 세그멘테이션 기법 : 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위로 분할해서 메모리에 적재하는 방식

    ◦  페이징 : 소고기를 같은 크기로 잘라서 보관하는 것

    ◦  세그멘테이션 : 소고기를 부위 별로 잘라서 보관하는 것

• 의미가 같지 않는 논리적 내용을 기준으로 프로그램을 분할하기 때문에 각 조각의 크기가 동일하지 않다.

이러한 분할 방식을 제외하면 페이징과 동일하기 때문에, 매핑 테이블의 동작 방식은 페이징 기법과 동일하다.

 

• 단순 세그멘테이션

    ◦  각 프로세스는 여러 세그멘트로 나뉨

    ◦  외부 단편화 (발생 O), 내부 단편화 (발생 X)

    ◦  메모리 사용 효율 개선 및 동적 분할을 통한 오버헤드 감소 효과가 있다.

 

• 가상 메모리를 활용한 세그멘테이션

    ◦  필요하지 않은 세그멘트는 로드되지 않음. 필요한 세그멘트는 나중에 자동으로 불러들여짐

    ◦  복잡한 메모리 관리로 인한 오버헤드 발생할 수 있다.

 

• 장점

    ◦  내부 단편화 문제가 해소된다.

    ◦  보호와 공유 기능을 수행할 수 있다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고,

         같은 코드 영역은 한 번에 저장할 수 있다.

 

• 단점

    ◦  외부 단편화 문제가 생길 수 있다.


참고자료

 

[운영체제(OS)] 15. 가상메모리

가상 메모리는 물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 즉, 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다. 예를 들어, 100MB 메모리 크기에서 200MB 크기

velog.io

 

[운영체제] 페이징과 세그멘테이션

cs-study에서 스터디를 진행하고 있습니다. 메모리 메인 메모리 (Main Memory, Physical Memory, 주기억장치) CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리

steady-coding.tistory.com

 

메모리 관리가 필요한 이유

• 멀티프로그래밍 환경으로 변화하면서 한정된 메모리를 효율적으로 사용할 필요가 생겼다.

• 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없기 때문에

    이를 자체적으로 관리하지 못한다.

• 운영체제만 메모리 영역과 프로세스 메모리 공간의 접근에 제약을 받지 않으므로 운영체제에서 이를 관리해줄 필요가 있다.

 

• 프로세스 주소

    ◦  논리적 주소(Logical address)

          -  CPU가 생성하는 주소. 가상 주소(Virtual address)라고도 부른다.

          -  프로세스마다 독립적으로 가지는 주소 공간 (힙/데이터/텍스트/스택 공간 등)

          -  프로세스 내부에서 사용하며 각 프로세스 마다 0의 주소 부터 시작한다.

    ◦  물리적 주소(Physical address)

          -  프로세스가 실행되기 위해 실제로 메모리(RAM)에 올라가는 위치

          -  Address Binding : 프로세스가 메모리의 어느 위치(어떤 물리적 주소)에 올라갈지 결정하는 작업

 

• 연속 할당 기법

    ◦  프로그램 전체를 하나의 커다란 공간에 연속적으로 할당하는 기법

    ◦  물리적 메모리를 다수의 분할로 나누어 하나의 분할에 하나의 프로세스가 적재되도록 한다.

    ◦  크게 고정 분할 방식가변 분할 방식으로 나뉜다.

 

• 불연속 할당 기법

    ◦  하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없앤 메모리 관리 방법

    ◦  프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있다.

    ◦  불연속 할당 기법에서 등장하는 개념들

          -  페이지 : 고정 사이즈의 작은 프로세스 조각

          -  프레임 : 페이지 크기와 같은 주기억장치 메모리 조각

          -  단편화 : 기억 장치의 빈 공간 or 자료가 여러 조각으로 나뉘는 현상

          -  세그먼트 : 서로 다른 크기를 가진 논리적 블록이 연속적 공간에 배치되는 것


고정 분할 방식

• 물리적 메모리를 정해진 개수의 영구적인 분할로 나누어두고 각 분할에 하나의 프로세스를 적재하는 방식

• 동시에 메모리에 올릴 수 있는 프로그램 수가 고정되어 있으며, 수행 가능한 프로그램의 최대 크기 또한 제한되기 때문에

    가변분할 방식에 비해 융통성이 떨어진다.

• Internal/External Fragmentation이 발생할 수 있다.


가변 분할 방식

• 메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수를 동적으로 조절하는 방식

• 프로그램의 크기를 고려하여 메모리를 할당하고, 이를 관리할 수 있는 기술이 필요한 방식이다.

• Internal Fragmentation은 발생하지 않지만, 메모리에 새로운 프로세스를 올릴 공간이 충분하지 않으면

    External Fragmentation이 발생할 수 있다.

    ◦  이는 컴팩션(compaction) 기법으로 해결 가능하지만, 비용이 매우 많이 든다.

          -  컴팩션 기법이란? : 중간중간 사용하지 않은채 뻥 뚫려있는 메모리 영역을 한쪽으로 모으기 위해 자원들을 한쪽으로 몰아넣는 기법

          -  수행중인 프로세스의 물리적 메모리 위치를 하나하나 옮겨야 하므로 비용이 매우 크다.

 

가변 분할 방식에서는 메모리 공간의 어디에 프로세스를 올려야 할지 결정해야 한다. (동적 메모리 할당 기법)

이를 결정하는 방법으로 아래 세가지 정도가 있다.

    ◦  최초 적합 방법

          -  가용 공간을 차례대로 살펴보면서 프로그램 크기 < 가용 공간 크기가 최초로 발견될 때 할당

          -  모든 가용 공간을 탐색할 필요가 없어 시간적으로 효율적이다.

    ◦  최적 적합 방법

          -  프로세스 크기 < 가용 공간 크기인 가장 작은 공간을 찾아 할당

          -  모든 가용 공간 리스트가 크기 순으로 정렬되어 있지 않으면 탐색에 오버헤드가 발생할 수 있다.

    ◦  최악 적합 방법

          -  프로세스 크기 < 가용 공간 크기인 가장 작은 큰 공간을 찾아 할당

          -  최적 적합과 동일하게 탐색 오버헤드가 발생할 수 있다.


참고자료

 

[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식

[OS] 메모리 연속할당 - 고정분할 방식과 가변분할 방식 안녕하세요? 장장스입니다. 실제 물리적 메모리는 크게 연속할당 방식과 불연속할당 방식으로 나뉩니다. 오늘은 메모리 연속할당 방

zangzangs.tistory.com

 

[메모리관리] 연속할당 방식 - 고정 분할 방식과 가변 분할 방식

연속 할당 방식 프로그램을 메모리에 올릴 때, 물리적 메모리의 한 곳에 연속적으로 적재하는 방식으로 고정 분할 방식과 가변 분할 방식이 존재합니다. 고정 분할 방식 주어진 개수 만큼의 영

junyng.tistory.com

교착 상태(Deadlock) 개념

• 교착상태란? 시스템 자원에 대한 요구가 뒤엉킨 상태

• 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한정 대기 상태에 빠지는 상황

• 데드락 발생 조건 (하나라도 성립하지 않으면 이는 해결 가능한 상황)

    ◦  상호 배제(Mutual exclusion)

          -  자원은 한번에 한 프로세스만 사용할 수 있음

    ◦  점유 대기(Hold and wait)

          -  최소한 하나의 자원을 점유하고 있으면서, 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하고 있는 상태

    ◦  비선점(No preemption)

          -  다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 뺏을 수 없음

    ◦  순환 대기(Circular wait)

          -  각 프로세스가 순환하는 형태로 다음 프로세스가 요구하는 자원을 가지고 있음


교착 상태를 해결하는 방법

예방(prevention)

데드락 발생 조건 중 하나를 제거함으로써 해결하는 방법

    ◦  상호배제 부정 : 여러 프로세스가 공유 자원을 사용할 수 있도록 허용

    ◦  점유대기 부정 : 프로세스 실행 전 모든 자원을 할당

    ◦  비선점 부정 : 자원을 점유 중인 프로세스가 다른 자원을 요구할 때, 가진 자원은 반납하도록 제한

    ◦  순환대기 부정 : 자원에 고유번호 할당하여 순서대로 자원을 요구하도록 제한

• 단점

    ◦  시스템 처리량 및 효율성을 떨어트린다

 

회피(avoidance)

• 데드락이 발생하지 않도록 알고리즘을 설계하는 방법

• 은행원 알고리즘(Banker's Algorithm)

    ◦  은행이 항상 최소 한 명에게 대출해줄 금액은 보유하고 있어야 함에서 유래

    ◦  해당 고객이 대출금을 반환하면 생긴 돈으로 다른 사람의 대출을 해결할 수 있다.

 

    ◦  특정 프로세스에 자원을 할당해주고 반환받을 수 있는 상태 = 안전 상태

    ◦  프로세스에 자원을 할당해줄수도, 돌려 받을수도 없는 상태 = 불안전 상태

          -  교착상태는 불안전상태에 속한다. (T)

          -  불안전상태는 교착상태에 속한다 (F)

    ◦  안전상태면 자원을 할당하고, 불안전 상태면 다른 프로세스들이 자원을 반환할 때까지 대기함으로써 교착 상태가 발생하지 않는

         환경을 조성하는 방법이다.

 

    ◦  이 알고리즘이 제대로 수행되기 위해서는 아래의 3가지 정보가 필요하다.

          -  각 고객들이 최대 얼마의 돈을 요구할지 (Max) = 각 프로세스가 자원을 최대 얼마나 요청할 수 있는지

          -  고객들이 현재 빌린 돈이 얼마인지 (Allocated) = 각 프로세스가 현재 보유하고 있는 자원이 얼마인지

          -  은행이 보유한 돈이 얼마인지, 빌려줄 수 있는 돈이 얼마인지 (Available) = 시스템이 자원을 얼마나 보유하고 있는지.

• 단점

    ◦  할당할 수 있는 자원의 수가 일정해야 한다. (자원 이용도가 낮다.)

    ◦  사용자 수가 일정해야 한다.

    ◦  최대 자원 요구량을 미리 알아야 한다.

    ◦  프로세스들은 유한한 시간 안에 자원을 반납해야 한다.

    ◦  복잡하고, 자원 이용에 제약이 많고, 알고리즘 수행시 오버헤드가 발생할 수 있다.

    ◦  즉 실제 돌아가는 프로그램에 적용하기 상당히 어렵다. → 현재 주로 채택되는 방식이 아님

 

탐지(Detection), 회복(Recovery)

• 교착 상태의 발생을 허용한 다음 회복시키는 방법

• 탐지(Detection)

    ◦  Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색하는 방법

    ◦  은행원 알고리즘에서와 유사하게 현재 시스템의 자원 할당 상태를 가지고 파악할 수 있다.

    ◦  자원 할당 그래프를 통해 교착 상태를 탐지하는 방법도 있다.

          -  단, 이 방법은 자원 할당 그래프를 만드는데 오버헤드가 발생할 수 있으니 주의가 필요하다.

• 회복(Recovery)

    ◦  교착 상태 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복하는 방법

    ◦  프로세스 종료 방법은 아래의 두가지 종류가 있다.

          -  교착 상태에 놓인 프로세스 전체를 종료시키는 방법

          -  교착 상태가 제거될 때까지 프로세스를 하나씩 종료시키는 방법

    ◦   할당된 자원을 해제시켜 회복하는 방법 : 자원 선점

          -  교착 상태의 프로세스를 일시정지 시키고, 해당 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에 할당하는 방식이다.

          -  우선 순위가 낮은 프로세스 / 수행 횟수가 적은 프로세스가 우선적으로 선점된다.

 

무시

• 회복과정의 성능저하가 심하다면 해당 교착 상태를 무시하는게 오히려 좋을 수 있다.

• 무시된 교착상태의 프로세스들은 시간이 지나면 자연스럽게 time-out 되어 종료된다.

• 현대의 운영체제들이 가장 많이 채택하는 방법이라고 한다 (!)


식사하는 철학자 문제

• 교착 상태를 설명하는 대표적인 알고리즘 문제로, 문제의 내용은 아래와 같다.

    ◦   철학자가 생각에 빠져 있을 때는 아무런 액션을 취하지 않지만, 때때로 배가 고파진다. 밥을 먹기 위해서는 포크 두 개가 필요하다.

    ◦   왼쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.

    ◦   오른쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다.

    ◦   포크 두 개를 잡으면 일정 시간 동안 밥을 먹을 수 있다.

    ◦   식사가 끝나면 사용한 포크 두 개를 내려놓는다.

    ◦   철학자는 다시 생각에 빠진다.

    ◦   배가 고픈데 일정 시간동안 식사를 못하면 철학자는 굶어죽는다!

 

• 이 때 만약 모든 철학자가 동시에 왼쪽 포크를 잡으면, 모두 오른쪽의 포크가 사용 가능해질 때까지 기다려야 한다.

    ◦   모든 철학자가 영원히 3번 상태에 머물러있는 교착 상태가 발생한다.

    ◦   무한 교착 상태로 인해 기아 현상이 발생하고, 철학자는 굶어 죽게된다!

 

• 몇가지 해결 방법

    ◦   왼쪽 포크를 들고나서 오른쪽 포크를 들 수 있나 보고, 안되면 포크를 내려놓는다.

          그리고 랜덤한 시간동안 기다린 다음 이를 다시 시도한다.

          -  모두가 동시에 왼쪽 포크를 잡아도 해도 서로 기다리는시간이 다르기 때문에 결국 누군가는 식사를 할 수 있지만,

              낮은 확률로 starvation이 발생할 수 있다.

          -  기아 현상이 절대 발생하면 안되는 환경(원자력발전소, 비행기 등)에서는 사용 불가능한 방법이다.

    ◦   식사할 수 있는 상황을 하나의 뮤텍스(Mutex)로 관리한다.

          -  한번에 한 명씩 반드시 식사를 할 수 있다. 하지만 한 명이 밥을 먹는 동안 맞은편의 철학자도 포크 두개를 잡을 수 있는 상황이다.

             즉 교착상태가 발생하지 않음이 보장되기는 하나, 자원의 낭비가 발생한다.

    ◦   세마포어와 몇가지 규칙을 잘 사용하면 식사하는 철학자 문제를 완벽하게 해결할 수 있다.

          -  간단히 설명하면 철학자의 상태를 식사 중, 식사 대기 중으로 표현하고, 자신의 양쪽이 식사 중이 아니면 식사를 할 수 있도록

             세마포어 형태로 관리하는 방법이다. 이 방법을 사용하면 주어진 상황에서 최대한 많은 철학자들이 교착상태 없이 식사를 할 수

             있다.


참고자료

 

데드락 (DeadLock, 교착 상태) | 👨🏻‍💻 Tech Interview

데드락 (DeadLock, 교착 상태) 두 개 이상의 프로세스나 스레드가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태 무한히 다음 자원을 기다리게 되는 상태를 말한다. 시스템적으로 한정된

gyoogle.dev

 

[운영체제] 데드락(Deadlock, 교착 상태)이란?

컴퓨터/IT/알고리즘 정리 블로그

chanhuiseok.github.io

 

식사하는 철학자 문제(Dining Philosopher Problem)

목표 식사하는 철학자 문제를 해결할 수 있다. 식사하는 철학자 문제란? 철학자 다섯 명이 원형 식탁에 앉아 밥을 먹으려고 합니다. 그들의 양쪽엔 각각 젓가락 한 짝씩 놓여 있고, 밥을 먹으려

jjangsungwon.tistory.com

 

터럽트 개념

• 현재 실행 중인 작업을 중단하고 발생한 상황에 대한 우선 처리가 필요함을 CPU 에게 알리는 하드웨어 기법

• 하드웨어가 자체적으로 변화를 체크하여 일정한 동작을 하는 방식

    ◦  하드웨어의 지원을 받아야 하는 제약이 있지만, 폴링 방식에 비해 신속한 대응이 가능하다.

• 외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생한다.

    ◦  외부 인터럽트

         -  외부 신호, 입출력 장치, 기계 이상 등의 외부적인 요인으로 발생

    ◦  내부 인터럽트

         -  Trap 이라고 부르며, 잘못된 연산이나 데이터를 사용할 때 발생

         -  예) 0으로 나누기, 오버플로우, Exception 등

• 소프트웨어 인터럽트는 명령어의 요청에 의해 발생한다.

    ◦  사용자가 프로그램을 실행시키는 경우

    ◦  소프트웨어 이용 중에 다른 프로세스를 실행시키는 경우 (시분할 처리를 위해 자원 할당 동작이 수행됨)


동기/비동기적 인터럽트

• 동기적 인터럽트

    ◦  CPU가 작업을 실행하는 도중 인터럽트가 도착해도 현재 작업을 마친 뒤에 인터럽트를 발생시킨다.

         -  CPU 하드웨어에는 인터럽트 요청 라인이라고 불리는 선이 하나 있는데, CPU는 매 명령을 끝내고 다음 명령을 수행하기 전

             이 선을 검사한다.

• 비동기적 인터럽트

    ◦  별개의 하드웨어 장치가 CPU 클락 신호와 상관없이 즉각적으로 인터럽트를 발생시키고, CPU는 실행중인 작업들을 일시 중지한 다음

         발생한 인터럽트 작업을 수행하게 된다.

    ◦  일반적인 인터럽트는 비동기적 인터럽트를 의미한다.


인터럽트 처리 과정

• 인터럽트가 발생하면 현재 수행 중이던 프로그램의 레지스터 값 및 상태 정보를 스택에 저장한 뒤,

    인터럽트 서비스 루틴으로 이동해 인터럽트를 처리한다.

    ◦  인터럽트 서비스 루틴 = 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴

• 작업이 끝나면 스택에 저장해두었던 정보를 기반으로 원래 위치로 돌아와 기존 작업을 이어서 수행한다.

• 폴링 방식

    ◦  사용자가 명령어로 입력값을 계속 읽어 특정 작업을 해야할 시기를 감지하는 방식

    ◦  폴링을 하는 동안에는 기존 작업을 수행할 수 없어 인터럽트 방식에 비해 처리 속도가 느리다


인터럽트와 이중 모드

• 이중 모드에서는 아래의 두가지 모드가 존재한다.

    ◦  사용자(User) 모드

    ◦  관리자(Supervisor) 모드

         -  관리자 모드에서만 내릴 수 있는 명령을 특권 명령(privileged instruction) 이라고 하며,

             STOP, HALT, RESET, SET_TIMER 등이 있다.

         -  이중 모드는 CPU 내부의 레지스터의 비트를 활용하여 나타낸다.

         -  예) 특권 모드일 때는 비트 값이 0 / 사용자 모드일 때는 비트 값이 1

 

• 사용자 모드에서 하드웨어 자원에 직접 접근하는 것은 매우 위험하므로,

    프로그램 소프트웨어에서 인터럽트를 발생시켜 운영체제의 관리자 모드에 해당 작업을 위임하자.

    ◦  만약 사용자 모드에서 특권 명령을 사용하려고 하면 CPU가 내부 인터럽트를 발생시켜 해당 명령어를 요청한 프로그램을

         강제로 종료시킬 것이다.

 

• 애플리케이션이 실행되는 동안 두 모드의 변경이 반복적으로 일어난다.

    ◦  컴퓨터 부팅 과정 (관리자 모드)

    ◦  애플리케이션 실행 과정 (관리자 모드)

    ◦  애플리케이션 실행중 (사용자 모드)

    ◦  인터럽트 발생 후 처리 과정 (관리자 모드)

    ◦  인터럽트 처리 후 (사용자 모드)

 

• 인터럽트와 이중모드

    ◦  하드웨어 인터럽트 발생, CPU로 인터럽트 전달 (사용자 모드)

    ◦  CPU : 모드 플래그를 관리자 모드로 변경

    ◦  해당 하드웨어 인터럽트 서비스 루틴(ISR)으로 이동 (관리자 모드)

    ◦  인터럽트 처리 (관리자 모드)

    ◦  CPU : 모드 플래그를 사용자 모드로 변경

    ◦  원래의 애플리케이션 위치로 복귀 (사용자 모드)


참고자료

 

운영체제 - YES24

운영체제

www.yes24.com

 

인터럽트(Interrupt) | 👨🏻‍💻 Tech Interview

인터럽트(Interrupt) 정의 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것 지금

gyoogle.dev

 

[운영체제(OS)] 3. 이중모드와 보호

현재 컴퓨터 환경은 여러 사람이 동시에 한 컴퓨터를 사용하는 경우가 많다.(서버 컴퓨터) 그리고 그 외에도 하나의 컴퓨터 내에서 여러 프로그램을 수행하는 것이 일반적이다. 이 때 특정 컴퓨

velog.io

 

'CS Knowledge > 운영체제' 카테고리의 다른 글

[OS] 운영체제와 메모리 관리  (0) 2022.09.22
[OS] 교착 상태(Deadlock) 개념  (6) 2022.09.22
[OS] CPU 스케줄링 알고리즘  (0) 2022.09.16
[OS] CPU 스케줄링 개념  (0) 2022.09.16
[OS] 스레드와 멀티스레드  (0) 2022.09.08