728x90
📌 1주차 : 운영체제 기본 개념
- 운영체제란?
- 인터럽트
- 커널, 커널모드, 유저모드
- 동기 I/O, 비동기 I/O
커널
- 운영체제 핵심 서비스 담당
이중모드
- CPU가 명령어를 실행하는 모드
- 사용자 모드: 커널 영역의 코드를 실행할 수 없는 모드, 응용 프로그램은 기본적으로 여기서 실행됨, 사용자 모드는 하드웨어 자원에 접근하는 명령어를 실행할 수 없음
- 커널 모드: 커널 영역의 코드를 실행할 수 있는 모드, 자원 접근 명령어 실행 가능
- 시스템 호출: 사용자 모드로 실행되는 프로그램이 자원 접근하려면 운영체제에게 요청을 보내서 커널 모드로 변환하는 것
- 소프트웨어 인터럽트: 특정 명령어에 의해 발생
프로세스 관리
- 프로세스: 실행 중인 프로그램
- 여러 프로세스가 동시에 실행되는 환경인 프로세스 동기화는 필수적
- 프로세스가 꼼짝도 못하고 실행되지 않는 교착상태 해결해야함
커널 서비스: 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리
자원 접근 및 할당
- 일반적으로 CPU는 한번에 하나의 프로세스만 실행 가능 그래서 여러 프로세스를 공정하게 할당하기 위해서는 CPU 스케줄링 필요
인터럽트
- 프로세스 실행 도중 예기치 않은 상황이 발생할 때 발생한 상황을 처리한 후 실행 중인 작업으로 복귀하는 것
- 종류
- 비동기적 인터럽트 / 하드웨어 인터럽트
- 전원 이상, 기계 착오, 외부 신호, 입출력 등 프로세스 외부에서 발생하는 인터럽트
- 동기적 인터럽트 / 소프트웨어 인터럽트
- 프로세스 내부에서 잘못된 명령어, 데이터로 exception이 발생하는 것이며 trap이라고 불림
- 비동기적 인터럽트 / 하드웨어 인터럽트
- 인터럽트 서비스 루틴(ISR)
- 주 프로그램 작업 수행 중 인터럽트 발생 -> 주 프로그램 상태 레지스터와 PC 등을 스택에 잠시 저장 -> 인터럽트 서비스 루틴으로 점프, 처리 -> 다시 주 프로그램 작업 복귀
동기 I/O, 비동기 I/O
- 입출력 동기화의 종류
- 동기 I/O
- 스레드가 행동에 들어가면 I/O 요청이 완료될 때까지 기다리기
- 프로그램이 I/O 요청을 했을 때 해당 I/O작업이 완료되어야 다음 작업을 할 수 있는 방식
- I/O 상태이면 해당 프로세스는 blocked state → 완료되면 wait 상태
- 완료되면 인터럽트를 통해 완료 알림
- 특징: 수행 속도는 빠르지만 입출력 연산은 느림, 기다리는 과정에서 자원 낭비 초래
- 비동기식 입출력
- cpu 제어권을 입출력 연산을 호출한 프로그램에게 곧바로 부여
- I/O 결과와 관련 없는 연산이 있을 경우 주로 사용 → 그래서 처리 가능한 작업부터 처리
- 완료되면 인터럽트를 통해 알림
질문 예비 준비
- 커널이 무엇인가요?
- 운영체제의 핵심부분
- 컴퓨터의 메모리, 프로세스 관리
- 컴퓨터의 자원을 관리
- 시스템 콜은 무엇이고 종류는 무엇이 있을까요?
- 사용자 모드에서 실행하는 응용 프로그램이 컴퓨터 자원을 요청할 때 사용
- 사용자 모드에서 커널 모드로 변경됨
- 종류는 리눅스 프로세스 정지 명령어, 파일 오픈, 클로즈
- 동기와 비동기 차이점에 대해 설명하세요.
- 동기는 요청과 결과가 동시에 일어난다는 약속, 결과가 나올때까지 대기해야함
- 비동기는 요청과 결과가 동시에 일어나지 않는 것이라는 약속, 결과가 나올까지 기다리지 않고 그 시간동안 다른 작업이 가능해서 자원을 효율적으로 사용 가능
- 운영체제의 dual mode(이중모드)에 대해 설명해 주세요
- 사용자 모드는 커널 영역 코드를 실행할 수 없는 모드, 응용 프로그램이 여기에서 실행되고, 하드웨어 자원에 접근하는 명령어를 사용할 수 없음
- 커널 모드는 자원 접근 명령어 실행 가능
- 인터럽트(Interrupt)가 무엇인가요?
- 프로그램 실행 중 예기치 못한 상황이 발생할 때 발생한 상황을 처리한 후 실행중인 작업으로 돌아오는 것
- 인터럽트의 종류를 말씀해주세요
- 하드웨어 인터럽트
- 하드웨어 장치에서 발생하는 인터럽트
- 소프트웨어 인터럽트: 주로 시스템 콜을 수행하기 위해 사용
- 잘못된 명령어로 인해 CPU 내부에서 발생하는 인터럽트
- 트랩
- 예외 처리: 권한이 없는 작업을 할때 이에 대한 처리를 위해 발생
- 하드웨어 인터럽트
- 내부 인터럽트가 발생하는 예시 상황
- 내부 인터럽트는 예외와 같은 상황에서 발생, 소프트웨어 인터럽트는 시스템 콜
- divide-by-zero, 잘못된 명령어 실행
- 운영체제란 무엇인가요?
- 시스템 소프트웨어
- 시스템 자원을 관리하고 사용자에게 편리하고 효고적으로 사용할 수 있는 환경 제공
- 인터럽트 처리 중 또 다른 인터럽트가 발생하는 경우는 어떻게 처리해야 하나요?
- 원칙적으로 다른 인터럽트 발생 허용 안함 → 데이터 일관성 문제
- 경우에 따라 예외 존재 필요성
- 현재 인터럽트 수행 지점 저장 → 우선 순위 높은 인터럽트 처리 → 원래 인터럽트 저장된 주소로 복귀 → 남은 코드 수행
- 운영체제와 응용소프트웨어의 차이점이 무엇인가요?
- 운영체제: 자원을 관리, 사용자 관리
- 응용소프트웨어: 소프트웨어를 만든 특정 목적만 수행
- 사용자 공간과 커널 공간의 차이점과 따로 나눈 이유를 설명해주세요!
- 사용자 공간: 응용 프로그램이 적재되고 변수가 저장되는 공간
- 커널 공간: 커널 코드, 커널 데이터, 스택 공간, 디바이스 드라이버 등이 탑재되는 공간
- 분리한 이유는 응용프로그램으로 부터 커널 코드와 데이터를 지키기 위해서
- 인터럽트 처리 과정
- 입출력 장치 → CPU 인터럽트 요청 신호
- CPU 실행 사이클 끝날때 항상 인터럽트 여부 확인
- CPU 인터럽트 요청 확인, 인터럽트 플래그를 통해 현재 인터럽트 받아들일지 여부 확인
- 인터럽트를 받아들일 수 있다면 CPU 작업 백업
- CPU 인터럽트 벡터 참조하여 인터럽트 서비스 루틴 실행
- 원래 작업 실행
예상 문제
1. 시스템 콜에 대해 설명해 주세요.
사용자 모드로 실행되는 프로그램이 자원 접근하려면 운영체제에게 요청을 보내서 커널 모드로 변환되는 것입니다.
2. 운영체제의 Dual Mode 에 대해 설명해 주세요
- 사용자 모드: 커널 영역의 코드를 실행할 수 없는 모드, 응용 프로그램은 기본적으로 여기서 실행됨, 사용자 모드는 하드웨어 자원에 접근하는 명령어를 실행할 수 없음
- 커널 모드: 커널 영역의 코드를 실행할 수 있는 모드, 자원 접근 명령어 실행 가능
3. 운영체제의 역할에 대해 2가지 말씀해 주세요.
- 사용자를 위한 역할로 사용자에게 컴퓨 시스템을 편리하게 사용할 수 있는 인터페이스 제공(GUI, CLI)
- 하드웨어를 위한 역할로 컴퓨터 시스템 내의 자원을 효율적으로 관리하는 역할
4. 인터럽트(Interrupt)가 무엇인가요?
프로세스 실행 도중 예기치 않은 상황이 발생할 때 발생한 상황을 처리한 후 실행 중인 작업으로 복귀하는 것
문제 출처
https://github.com/devSquad-study/2023-CS-Study/blob/main/Interview/os_expected_question.md