ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW 정글 56일차] Pintos 입문하면서 용어 정리하기
    기타/SW 사관학교 정글 2021. 9. 28. 03:38

    오늘은 Pintos 만들기에 들어갔다.

    일단은 document를 읽으면서 무엇을 해야하는지 알아보고 document에서 나온 용어 중 정리하면 좋을 개념들을 정리하려고 한다.

     

     

     

    1. Kernel vs Operating System(OS)

    개인적으로 커널은 운영체제라는 개념과 헷갈리는 용어이다.

    커널은 운영체제의 핵심이 되는 컴퓨터 프로그램의 하나로 하드웨어와 프로세스의 운용을 위한 소프트웨어이다.

    커널이라고 하면 운영체제를 말하기도 하고 응용 프로그램들의 실행 환경을 이루고 운용하는 것을 말하기도 한다.

    시스템의 자원은 제한되어 있지만 동작되고 있는 프로그램은 많기 때문에 커널은 한 프로그램이 언제 얼마큼 자원을 써야 할지 결정하고 운영 시켜야 한다.

     

    커널의 특징은 다음과 같다.

    - 커널은 디스크에 파일로 존재하는 프로그램이고 시스템이 기동될 때, boot 프로그램에 의해 구동되며 메모리에 올라오게 된다.

    - 커널은 응용 프로그램 소프트웨어와 시스템 하드웨어 사이의 다리 역할 을한다. 하드웨어와 직접 통신하여 응용 프로그램 소프트웨어가 요청한 내용을 알려준다.

    - 기본적으로 프로세스와 메모리 관리, 입출력 장치관리, 작업 관리 및 시스템 호출 인터페이스기능을 수행한다.

    - 커널은 메모리, 디스크, 네트워크카드, 비디오 카드 등과 같은 모든 하드웨어를 관리한다.

     

     

    출처: https://en.wikipedia.org/wiki/Kernel_(operating_system)

     

    운영체제는 시스템 리소스를 관리하는 시스템 소프트웨어으로 사용자와 시스템 하드웨어 간의 인터페이스 역할을 한다.

    운영 체제없이 시스템을 실행하는 것은 불가능하고 응용 프로그램은 운영 체제가 제공하는 환경에서 실행된다.

     

    운영체제와 커널의 차이점은 다음과 같다.

    - 운영체제와 커널의 기본적인 차이점은 운영체제는 시스템의 자원을 관리하는 시스템 프로그램이고 커널은 운영체제의 중요한 부분 (프로그램)이다.

    - 커널은 시스템의 소프트웨어와 하드웨어 간의 인터페이스 역할을 하고 운영체제는 사용자와 컴퓨터 간의 인터페이스 역할을 한다.

     

     

     

    2. Thread

    스레드프로세스 내에서 실행되는 흐름의 단위를 말한다.

    일반적으로 하나의 프로세스는 하나의 스레드를 가지고 있지만 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있고 이러한 실행 방식을 멀티스레드라고 한다.

    스레드는 자신만의 고유한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택을 가진다. 코드, 데이터, 파일 등 기타 자원은 프로세스 내의 다른 스레드와 공유한다.

     

    스레드의 종류로는 2가지가 존재한다.

    1) 사용자 레벨 스레드

    사용자 스레드는 사용자 레벨의 라이브러리를 통해 구현되며 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다.

    사용자 스레드는 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠른 장점이 있다.

    하지만 여러 개의 사용자 스레드 중 하나의 스레드가 시스템 호출 등으로 중단되면 나머지 모든 스레드가 중단되는 단점이 있다.

     

    2) 커널 레벨 스레드

    커널 스레드는 운영체제가 지원하는 스레드 기능으로 구현되며 커널이 스레드의 생성 및 스케줄링 등을 관리한다.

    스레드가 시스템 호출 등으로 중단되더라도 커널은 프로세스 내의 다른 스레드를 중단시키지 않고 계속 실행시켜준다. 다중처리기 환경에서 커널은 여러 개의 스레드를 각각 다른 처리기에 할당할 수 있다.

    하지만 사용자 스레드에 비해 생성 및 관리하는 것이 느리다는 단점이 있다.

     

     

     

    3. 인터럽트 (intrrupt)

    인터럽트프로세서가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치에서 예외상황이 발생하여 처리가 필요할 경우에 프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.

     

    인터럽트와 헷갈리는 개념이 시스템 콜인데 시스템 콜을 간단히 말하면 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.

     

    즉, 인터럽트는 프로세서가 프로그램을 잘 실행하고 있는데 예기치 못한 상황에 의해 우선 처리해야할 작업이 들어와서 현재 진행 중이던 작업을 잠시 멈추고 들어온 작업을 처리한 후 다시 원래 작업시점부터 처리하는 것을 말한다.

    그리고 시스템 콜은 실행 중이던 프로세스가 운영체제(커널)의 도움을 받아야지만 할 수 있는 일이 생겨서 운영체제에게 도움을 요청하여 커널모드로 변경되기 위한 작업이하고 말할 수 있다.

     

    인터럽트가 필요한 근본적인 이유는 입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문에 이러한 차이에 따른 효육적인 시스템 자원의 활용을 위해서이다.

    또한, 예상치 못한 장애로 인해 실행 중이던 프로그램을 완료하지 못했을 때, 처음부터 다시하지 않고 중단된 위치로 복귀하여 다시 프로그램을 진행하는데 필요하다.

    즉, 예기치 못한 상황이 발생하였을 때, 시스템 자원을 효율적으로 사용하기 위한 것이다.

     

    인터럽트는 크게 하드웨어 인터럽트(외부 인터럽트)와 소프트웨어 인터럽트(내부 인터럽트)로 나뉘는데 아래 5번에서 정리하려고 한다.

     

    인트럽트에는 우선순위가 존재하는데 우선순위는 아래와 같다.

    출처: https://m.blog.naver.com/syunjae21/222065512231

    인터럽트가 발생하였을 때에 동작 순서는

    인터럽트 요청 -> 인터럽트 인지 -> 현 상태 보존 -> 인터럽트 원인 판별 -> 인터럽트 취급 루틴 시작 지시 -> 인터럽트 취급 -> 원 상태로 복귀

     

    인터럽트에 대해 정말 잘 정리되어 있는 블로그가 있어 링크를 남기려고 한다.

    https://m.blog.naver.com/syunjae21/222065512231

     

    [정보처리][EC구조] 31. 인터럽트 Interrupt

    인터럽트의 개념 ❐ Interrupt의 필요성 ㆍCPU와 주변 장치 사이의 차이에 따른 효율적 시스템 자원의 ...

    blog.naver.com

     

     

     

     

    4. synchronization primitives

    synchronization primitives는 쓰레드 동기화 혹은 프로세스 동기화를 지원하기 위한 목적으로 OS와 같은 플랫폼으로 유저에게 제공하는 간단한 소프트웨어 매커니즘이다.

    보통은 low level 매커니즘으로 atomic 연산, 메모리 경계, spinlock, context switch 등을 포함하는 개념이다.

    그리고 우리가 흔히 아는 mutex, event, conditional variables, semaphore와 같은 것들도 synchronization primitives라고 말할 수 있다.

     

     

     

    5. External interrupt vs Internal interrupt

    External interrupt는 외부참조, 유저, 주변기기, 기타 하드웨어나 네트워크를 통해 발생하는 인터럽트를 말한다.

    예를 들면, 키보드 입력을 통해 데이터가 들어오면 interrupt가 걸리거나 네트워크를 통해 메시지가 들어오면 interrupt가 걸리는 상황을 external interrupt라고 한다.

    이외에 전기 이상(정전 인터럽트), 기계 이상(기계적 고장으로 발생하는 인터럽트), 타이머 요청 인터럽트 등이 있다.

     

    Internal interrupt는 machine에서 프로그램이나 프로세스에서 실행 중인 instruction로 인해 자연적으로 혹은 자동적으로 발생하는 특정한 인터럽트를 말한다.

    예를 들면, instruction 상에 a라는 변수를 나누는 연산이 있는데 divisor가 0이면 divide by a zero interrupt라는 internal interrupt가 발생한다.

     


    [오늘의 나는 어땠을까?]

    오늘은 1기 수료생들부터 시작해 코치님까지 힘들다고 말하는 Pintos 주차에 돌입했다

    pintos 주차는 총 5.5주이다.

    2.5주를 한 후에 조가 바뀌고 남은 2주를 진행한다.

    일단은 document를 보고 무엇을 하는지 이해하려고 하는데 무엇을 하는지는 알겠는데 어떻게 해야할지는 머릿 속에 아직 그려지지 않는다.

    그래서 일단은 개념공부부터 하려고 한다.

    지금 주차에 필요한 개념만 공부할지, 전체적인 OS 개념을 공부할지는 해봐야할 것같다.

    일단은 수요일까지 개념을 공부하고 목요일부터 구현을 하려고 계획을 잡았다.

    이번에는 아쉼움을 남기는 주차를 보내지 않았으면 좋겠다.

    댓글

Designed by Tistory.