OS 면접 스터디 1주차 - 운영체제 기본 개념

    운영체제 (Operating System)

    운영체제(OS, Operating System)는 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층입니다. 운영체제는 컴퓨터 시스템의 가장 기본적인 소프트웨어로서, 다양한 응용 프로그램들이 실행될 수 있도록 환경을 제공하고, 컴퓨터 시스템 자원(CPU, 메모리, 디스크, SW 자원) 을 효율적으로 관리하는 역할을 수행합니다.

    대표적인 운영체제로는 데스크탑과 노트북에서 사용되는 Windows, macOS, Linux 등이 있으며, 스마트폰에서는 Android와 iOS가 많이 사용됩니다.

    처리 방식에 따른 운영 체제의 분류

    일괄 처리 시스템 (Batch Processing System)

    • 작업 요청의 일정량 모아서 순차적으로 처리
    • 예) 초기 Punch Card (천공 카드) 처리 시스템 

     

    시분할 시스템 (Time-Sharing System)

    • 여러 작업을 수행할 때 컴퓨터 처리 능력을 일정한 시간 단위로 분할하여 사용
    • CPU는 매우 짧은 시간 동안 여러 프로그램을 번갈아 가며 실행하여 사용자가 동시에 작업을 수행하는 것처럼 보임

     

    실시간 시스템(Realtime System)

    • 정해진 시간 안에 특정 작업이 반드시 종료됨이 보장되어야하는 실시간 시스템을 위한 OS
    • 예) 원자로 제어, 미사일 제어, 반도체 장비 등

     

    다중 프로그래밍 시스템 (Multi-Programming System)

    • 하나의 CPU에서 여러 프로그램을 동시에 실행
    • CPU 자원의 사용 효율을 높임

     

    다중 처리기 시스템 (Multi-Processor System)

    • 두 개 이상의 CPU를 사용하여 작업을 병렬로 처리
    • 작업의 처리 속도 향상

     

    대화형 시스템 (Interactive System)

    • 사용자가 명령을 입력하면, 컴퓨터는 즉각적으로 응답을 제공
    • 예) 터미널, 콘솔 인터페이스

     

    폴링 (Polling)

    CPU가 주기적으로 I/O 장치나 다른 시스템 리소스를 확인하여 특정 이벤트나 상태 변화를 감지하는 방법입니다. CPU는 루프를 돌면서 장치가 준비되었는지 확인하고, 준비된 경우 작업을 수행합니다. 준비되지 않았다면, 계속해서 상태를 확인하며 반복합니다. 폴링은 구현이 간단하고 복잡한 하드웨어가 필요하지 않기 때문에, 상대적으로 간단한 소규모 시스템에서 유용할 수 있으며, CPU 자원을 계속 사용하기 때문에 작업 효율이 떨어져 현대 다양한 프로세스 처리에는 적합하지 않습니다.

    인터럽트 (Interrupt)

    인터럽트는 하드웨어나 소프트웨어에서 발생하는 이벤트에 의해 현재 실행 중인 프로세스의 흐름을 잠시 멈추고, 운영체제가 이 이벤트를 처리하도록 요구하는 신호입니다. 인터럽트가 발생하면 CPU는 현재 실행 중인 명령어의 상태를 저장하고, 인터럽트 처리 루틴으로 분기하여 필요한 작업을 수행합니다. 작업이 완료되면, CPU는 저장된 상태를 복구하고 원래 실행하던 코드로 돌아갑니다. 

    인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉩니다.

    *인터럽트 벡터: 인터럽트 요청 발생 시, 해당 인터럽트를 처리하기 위한 ISR의 주소를 저장하고 있는 자료구조
    *인터럽트 처리 루틴 (Interrupt Service Routine, 인터럽트 핸들러): 인터럽트 발생 시, 해당 인터럽트를 처리하기 위해 운영체제나 하드웨어에서 호출되는 특별한 함수나 코드 블록

    하드웨어 인터럽트 (= 외부 인터럽트)

    외부 하드웨어 장치에서 발생하는 인터럽트로, CPU의 현재 작업을 중단하고, 하드웨어 장치의 요청을 처리해야 할 때 발생합니다. 이는 CPU가 직접적으로 처리하지 않는 외부 장치(키보드, 마우스, 네트워크 카드, 하드 디스크 등)에서 이벤트가 발생했음을 CPU에 알리기 위해 사용됩니다. 하드웨어 인터럽트에는 타이머 인터럽트, I/O 인터럽트, 전원 이상 인터럽트가 있습니다.

    예시 - 사용자가 키보드에서 키를 누를 때마다 키보드 컨트롤러는 하드웨어 인터럽트를 발생시켜 CPU에 신호를 보냅니다. CPU는 이 신호를 받고 키보드 입력을 처리하는 인터럽트 서비스 루틴(ISR)을 실행합니다.

    소프트웨어 인터럽트 (= 내부 인터럽트)

    소프트웨어가 명령어를 통해 의도적으로 발생시키는 인터럽트입니다. 주로 응용 프로그램이 운영체제의 특정 기능이나 서비스를 요청할 때 사용됩니다. 이는 소프트웨어가 CPU에 특정 작업을 요청하거나, 예외 상황을 처리하기 위해 발생시킵니다. 소프트웨어 인터럽트에는 Exception 인터럽트와 System Call이 있습니다.

    1. Exception 인터럽트 (Trap)

    예시 - 0으로 나누기, Under/Overflow, 잘못된 메모리 접근

    2. System Call (= SVC 인터럽트)

    시스템콜 (System Call)

    사용자 프로그램이 운영체제의 기능을 이용하기 위해 호출하는 명령으로, 사용자 모드에서 실행되는 프로그램이 커널 모드에서만 수행할 수 있는 작업을 요청하는 메커니즘입니다. 

    예를 들어, 메모리 관리, 파일 시스템 접근, 네트워크 통신, 프로세스 관리 등은 시스템 콜을 통해서만 접근할 수 있습니다. 시스템 콜을 호출하면, CPU는 사용자 모드에서 커널 모드로 전환되어, 운영체제가 해당 작업을 수행하고 결과를 반환합니다.

    위에서 설명했듯이 소프트웨어 인터럽트의 일종입니다.

    커널 (Kernel)

    운영체제의 핵심 구성 요소로, 컴퓨터 하드웨어와 소프트웨어 간의 상호작용을 관리하는 역할을 하는 소프트웨어입니다. 시스템의 자원 관리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 시스템 콜 수행 등의 역할을 합니다.

    출처: https://www.javatpoint.com/what-is-kernel

    유저 모드 (User Mode)

    유저 모드는 응용 프로그램이 실행되는 환경으로, 시스템 자원에 대한 제한된 접근 권한만을 가집니다. 이 모드에서 실행되는 코드는 커널의 핵심 자원(예: 하드웨어 장치, 메모리 관리 기능 등)에 직접 접근할 수 없습니다. 대신, 이러한 자원에 접근하려면 시스템 콜(System Call)을 통해 커널 모드로 전환해야 합니다.

    커널 모드 (Kernel Mode)

    커널 모드는 운영체제의 핵심 코드가 실행되는 환경으로, 시스템의 모든 자원에 대한 완전한 접근 권한을 가집니다. 커널 모드에서 실행되는 코드는 하드웨어와 직접 상호작용할 수 있으며, 시스템의 모든 부분을 제어할 수 있습니다.

     

    모드 전환 과정

    1. 시스템 콜 호출: 응용 프로그램이 시스템 콜을 호출하면, 현재 실행 중인 코드가 유저 모드에서 커널 모드로 전환됩니다.

    2. 커널 모드에서 작업 수행: 커널이 요청된 작업(예: 파일 읽기, 네트워크 데이터 전송 등)을 수행합니다.

    3. 유저 모드로 복귀: 작업이 완료되면 커널은 유저 모드로 돌아가고, 응용 프로그램이 실행을 계속합니다.

    DMA (Direct Memory Access)

    일종의 컨트롤러로서, CPU의 개입 없이 주변 장치와 메모리 간에 직접 데이터 전송을 수행하여 시스템 효율성을 높이는 데 사용됩니다. CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아주며, CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송합니다. 이처럼 DMA는 데이터 처리의 효율성을 높이고, CPU 자원을 보다 중요한 작업에 사용할 수 있게 함으로써, 전체적인 시스템 성능을 최적화하는 데 중요한 역할을 합니다.

    대용량 데이터 전송이 필요한 경우에 유용하며, 예를 들어 비디오 스트리밍, 대량의 파일 복사, 네트워크 데이터 처리 등에서 자주 활용됩니다.

    동기식 I/O (Synchronous I/O)

    I/O 작업 요청 후 해당 작업이 완료될 때까지 기다렸다가 사용자 프로그램으로 제어권이 넘어가는 방식입니다.

    • 장점: 구현이 간단하고, I/O 작업이 끝난 후 바로 다음 작업을 수행할 수 있어 흐름이 직관적입니다.
    • 단점: I/O 작업 중에 CPU가 대기 상태에 머물러 있어, CPU 자원이 비효율적으로 사용될 수 있습니다.

    비동기식 I/O (Asynchronous I/O)

    I/O 작업 요청 후 그 작업이 완료될 때까지 기다리지 않고, 다른 작업을 계속 수행하는 방식입니다. 

    • 장점: CPU가 I/O 작업 동안 다른 작업을 수행할 수 있어, 시스템 자원이 더 효율적으로 사용됩니다.
    • 단점: 구현이 복잡하며, 작업 간의 동기화와 에러 처리가 까다로울 수 있습니다.

    동기/비동기식 모두 I/O 작업이 완료되면 CPU는 인터럽트나 콜백 등을 통해 그 사실을 통보받고, 이후 결과를 처리합니다.

     

    728x90

    댓글