0
이면 커널 모드, 1
이면 사용자 모드이다.
프로그램이 컴퓨터에서 동작하고 있을 때, 입출력 우선 순위가 높은 작업 혹은 예외상황이 발생하여 처리가 필요할 경우 CPU에게 알려주어 처리할 수 있도록 하는 것이다.
인터럽트에는 다음 2가지 종류가 있다.
하드웨어 인터럽트이며, CPU의 외부 하드웨어에 의해 발생하는 인터럽트이다. 하드웨어 흐름에 의해 싱기는 인터럽트로, Asynchronous(비동기)
특성을 가지고 있다
🧷종류
- I/O(입출력) 인터럽트 : 입출력 작업이 종료되어 결과를 반환하거나 오류에 의해 정지되었을 때 발생
- Power fail(전원 이상) 인터럽트 : 전원이 이상현상에 의해 공급 중단되었을 때 발생
- Machine check(기계 착오) 인터럽트 : CPU의 기능이 잘못되었을 때 발생
- External(외부) 인터럽트 : 외부 장치로부터 인터럽트가 오거나 ^C 키 발생, 자원 할당 시간이 끝남을 알리는 타이머에 의해 발
소프트웨어 인터럽트이며, CPU 내부에서 발생하는 인터럽트이다. Exception라고도 불리며, CPU에서 instruction을 읽으며, 잘못된 명령 혹은 데이터를 사용할 때 발생한다. 프로그램 내부의 명령어에 의하여 고정적인 위치에서 발생하는 인터럽트로 Synchronous(동기적)
특성을 가진다.
🧷종류
- 프로그램 검사 인터럽트 : 프로그램적으로 발생하는 오류에 의하여 발생( 0으로 나누기, over/under flow, 예외 등)
- 시스템 콜에 의하여 발생
폴링 방식 : 상태를 주기적으로 검사하여 조건을 만족하면 처리를 하는 방식
인터럽트 방식 : 특정 신호를 발생시켜 운영체제에 처리를 요구하는 방식✔
폴링 방식의 문제점은 주기적으로 검사를 해야 하며 문제가 없더라도 검사를 하기 때문에 CPU가 일을 많이 한다. 그에 비하여 인터럽트 방식은 발생 시에만 처리를 하고 다른 시간에는 다른 작업을 할 수 있기 때문에 효과적으로 관리를 할 수 있다. 따라서 오늘날 거의 모든 컴퓨터가 인터럽트 기반의 시스템을 사용합니다.
정의를 보면 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 간단하게 말하자면 운영체제 서비스를 접근하기 위한 유일한 수단이다. 프로그램을 실행하거나 프로그램이 컴퓨터 자원을 사용하기 위해서는 시스템 콜을 통해 커널에 자원 사용을 요청을 해야 한다.
(시스템 콜을 할 때는 프로그램이 운영체제에게 스스로 Interrupt80 발생한다.)
$cp a.txt b.txt //a.txt를 b.txt에 복사한다.
위 명령어를 실행하면 다음과 같은 과정이 일어난다.
위 과정에서 open 2번, read/write, close 2번 총 6번의 시스템 콜이 일어났다.
🧷종류
- 프로세스 제어 : 프로세스를 생성, 중지(fork, exec, exit ...)
파일 조작 : 파일 생성, 삭제, 속성 관리 등(create, open, close, lseek ...)- 장치 관리 : 장치 연결, 방출, 속성 관리 등(open, close, ioctl ...)
- 정보 유지 : 시간, 날짜 설정, 프로세스와 연결된 파일, 장치 관리 등(time, date, dump, pid ...)
- 통신 : 통신 연결 생성, 제거, 메시지 송수신 등(open, connect, accept, read, pipe ...), 메모리 공유 방식과 메시지 전달 방식이 있습니다.
- 보안 : 파일, 사용자 권한 등(chmod, umask ...)
사실 사용자는 보통 시스템 콜을 직접 사용하지 않는다. 대신에 응용프로그램이 OS에 내장되어 있는 High-level language(c/c++/java/..) API를 통해 시스템 콜을 호출한다.
하지만 각 OS의 종류마다 각기 다른 API가 내장되어 있기 때문에, 예를들어, windows에서 실행 가능한 c언어로 만들어진 프로그램을 mac-os나 linux에서 실행할 수 없는 것이다.
즉 정리하자면, windows에서 실행할 수 있는 프로그램은 windows의 API로 시스템 콜을 사용할 수 있도록 만들어졌기 때문에, 다른 API를 갖고 있는 다른 OS에서 사용할 수 없는 것이다.
API 종류
Win32 API : windows용
POSIX API : linux, mac-os용
JAVA API : JVM