운영체제의 동작 과정 (Dual-Mode Execution)
- 운영체제는 기본적으로 사용자에게 인터페이스를 제공하는 User Mode와 기기들을 직접 관리하는 Kernel Mode로 구분된다.
- User Mode : 일반적인 응용프로그램이 구동되는 환경이다.
- Kernel Mode : 커널이 구동되는 환경이며, 이 모드에서는 OS 시스템에 영향을 주는 명령어를 실행할 수 있다.
- Kernel에서의 작업은 컴퓨터의 중요한 부분에 해당하는 작업이기에 사용자가 직접 작업하다가 문제가 생길 시 컴퓨터 전체에 영향을 끼치기 때문에 User Mode와 Kernel Mode로 나눠 사용자가 접근하지 못하게 한다.
- 처음 운영체제가 구동되면 초기화 작업 및 부팅 과정에서 필요한 과정들을 수행하기 위해 커널 모드로 시작되지만, 곧 사용자 모드로 전환된다.
- 프로그램을 사용하면서 인터럽트나 트랩이 발생되면 모드 비트를 0으로 전환하고, 운영체제의 모드 또한 커널 모드로 변경된다.
인터럽트(Interrupt)란?
- 인터럽트란 컴퓨터 시스템에서 발생하는 중단 신호로 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 잠시 프로그램을 중단하고 발생한 일을 처리한 후, 다시 실행중인 작업으로 돌아오는 것을 말한다.
인터럽트의 종류
- 하드웨어 인터럽트 : 하드웨어 장치에서 발생하는 인터럽트로, 주변 장치와의 상호작용을 관리합니다. 예를 들어, 키보드나 마우스와 같은 입력 장치, 타이머나 외부 신호에 의한 인터럽트가 여기에 해당합니다.
- 소프트웨어 인터럽트 : 소프트웨어 명령에 의해 발생하는 인터럽트로, 프로그램의 명령에 따라 명시적으로 발생시킬 수 있습니다. 주로 프로세스 간 통신이나 예외 처리를 위해 사용됩니다.
- 예외 인터럽트 : 프로세서가 실행 중에 예외 상황을 감지할 때 발생하는 인터럽트입니다. 이는 프로그램 에러, 메모리 오류, 연산 오버플로우 등과 같은 예외 상황을 처리하기 위해 사용됩니다.
- 외부 인터럽트 : 외부 장치나 외부 시스템에서 발생하는 인터럽트로, 주로 다른 컴퓨터 시스템과의 통신에서 사용됩니다.
인터럽트 동작과정
- 인터럽트 요청 발생
- 프로그램 수행 중단
- 현재 수행중인 명령의 수행이 완료된 시점에서 중단
- PC에 기억되어 있는 주소를 안전한 곳에 기억시켜서 보존
- 상태 레지스터와 PC 등을 스택에 잠시 저장한다.
- 인터럽트 전처리 실행
- 원인 파악
- 처리 루틴을 호출
- 인터럽트 서비스 루틴(ISR) 실행
- 프로그램의 상태를 안전한 곳에 기억시켜 보존
- 해결
- 보존 시킨 PC의 값을 PC에, 그리고 보존시킨 프로그램의 상태를 환원시킨 프로그램의 수행을 중단되었던 곳에서부터 계속하여 수행.
시스템 콜(System Call)이란?
- 프로세스가 시스템의 자원이나, 서비스를 필요로 할 경우 운영체제에게 요청하는 것을 시스템 콜이라고 합니다.
- 우리가 일반적으로 사용하는 프로그램은 '응용프로그램'입니다. 유저레벨의 프로그램은 유저레벨의 함수들 만으로는 많은 기능을 구현하기 힘들기 때문에, 커널(kernel)의 도움을 반드시 받아야 합니다.
- 이러한 작업은 응용프로그램으로 대표되는 유저모드에서는 수행할 수 없습니다. 반드시 kernel에 관련된 것은 커널모드로 전환한 후에야, 해당 작업을 수행할 권한이 생깁니다. 커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있습니다.
시스템 콜의 동작과정
- 사용자 프로세스가 시스템 콜 호출(Kernel mode 진입)
- 커널은 내부적으로 시스템 콜을 분하기 위해 기능별로 고유번호를 할당하고 그 번호에 해당하는 제어 루틴을 정의
- 커널은 요청받은 시스템 콜에 대응하는 고유번호 확인하고 번호에 맞는 서비스 루틴 호출
- 커널은 서비스 루틴을 처리하고, 사용자 모드(User mode)로 전환
필요한 기능이나 시스템 환경에 따라 시스템 콜이 발생할 때 좀 더 많은 정보가 필요할 수 있다. 그러한 정보가 담긴 매개변수를 운영체제에 전달하기 위해서는 3가지 방법이 있습니다.
- 매개변수를 CPU 레지스터 내에 전달합니다.
- 이 경우에 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많을 수 있습니다.
- 위와 같은 경우에 매개변수를 메모리에 저장하고 메모리의 주소가 레지스터에 전달됩니다.
- 매개변수는 프로그램에 의해 스택(stack)으로 전달(push)될 수 있습니다.
- 2, 3번 방법의 경우 전달되는 매개변수의 개수나 길이에 제한이 없기 때문에 몇몇 운영체제에서 선호하는 방식입니다.
시스템 콜 유형
1) 프로세스 제어
- 끝내기(exit), 중지(abort)
- 적재(load), 실행(execute)
- 프로세스 생성(create process) - fork
2) 파일 조작
- 읽기(read), 쓰기(write)
- 열기(open), 닫기(close)
- 파일 생성(create file), 파일 삭제(delete file)
3) 장치 관리
- 하드웨어의 제어와 상태 정보를 얻음(ioctl)
- 장치를 요구(request devices), 장치를 방출(release device)
- 읽기(read), 쓰기(write)
4) 정보 유지
- getpid(), alrarm(), sleep()
- 시간과 날짜의 설정과 획득(time)
- 시스템 데이터의 설정과 획득(date)
5) 통신
- pipe(), shm_open(), mmap()
- 통신 연결의 생성 및 제거
- 메시지의 송신 및 수신
#Reference
- https://c4u-rdav.tistory.com/85
'운영체제' 카테고리의 다른 글
[Pintos-Kaist] Project2 - System Call(1) - (halt, exit, create, remove) (1) | 2023.06.06 |
---|---|
[Pintos-Kaist] Project2 - Argument Passing (1) | 2023.06.05 |
[Pintos-Kaist] Project 1 - Threads 1주차 학습 (0) | 2023.06.02 |
[운영체제] 스핀락(Spinlock),뮤텍스(Mutex),세마포어(Semaphore) (0) | 2023.05.29 |
[운영체제] 동시성(Concurrency)과 병렬성(Parallelism) (0) | 2023.05.27 |