컴퓨터의 부팅과정
-
전원이 켜질 때 ROM에 저장된 초기 프로그램을 실행
-
초기 프로그램은 메모리, CPU 레지스터 등을 초기화
-
이후에 운영체제를 찾아서 메모리에 적재
-
운영체제는 첫 번째 프로세스를 즉시 실행
-
인터럽트가 발생하면서 CPU가 각종 작업을 처리
1번에서의 초기 프로그램은 바이오스라고 이야기 할 수 있다 !.! 바이오스는 ROM에 저장된 초기 프로그램으로 가장 기본적인 컴퓨터의 입출력을 처리하는 소프트웨어이다.
5번에서 말하는 인터럽트에 대해 조금 더 알아봅시다.
인터럽트
-
인터럽트는 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것이다.
-
인터럽트는 소프트웨어 인터럽트와 하드웨어 인터럽트로 나눌 수 있다.
소프트웨어 인터럽트
- CPU 내부에서 자신이 실행한 명령, CPU의 명령 실행에 경우 발생한다
ex)
-
존재하지 않는 메모리 주소에 접근할 때
-
나눗셈을 0으로 나누고자 하는 경우
하드웨어 인터럽트
- CPU 외부의 주변장치로부터 요구되는 것
ex)
-
기계검사 인터럽트
- 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제가 발생한 경우
-
외부 인터럽트
- 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
-
입출력 인터럽트
- 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
-
프로그램검사 인터럽트
- 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제가 발생한 경우
인터럽트 처리 방법
방법 1
-
어떤 종류의 인터럽트인지 확인
-
인터럽트 핸들러를 호출하여 인터럽트를 처리
여기서 인터럽트 핸들러란 인터럽트 접수에 의해 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴으로 원인에 따라 각각 존재하며 작업을 마치는 데 걸리는 시간도 다양합니다.
방법 2
-
인터럽트가 요청되면 인터럽트 서비스 루틴의 주소를 가리키는 포인터들로 구성된 인터럽트 벡터테이블을 참조
-
참조된 포인터가 가르키는 인터럽트 처리 루틴을 호출하여 인터럽트를 처리
위 사진은 백터테이블로 인터럽트의 종류에 따라서 어느 위치에 가서 인터럽트 서비스를 처리하는지 적어놓은 테이블입니다.
이때 방법 1 보다 방법 2를 사용합니다. 방법 1은 운영체제가 모든 인터럽트 처리 루틴을 가지고 있어야 해 메모리에 제약이 있습니다.
인터럽트 처리 루틴
-
인터럽트 요청 검사
-
인터럽트 단계
- 인터럽트 소스 확인
- 인터럽트 서비스 루틴 실행 준비 이때 복귀할 때 필요한 최소환의 정보를 stack에 저장
-
인터럽트 핸들러 실행
-
인터럽트 리턴
시스템 호출
- 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스로 하드웨어의 상세한 동작을 추상화하고 운영체제를 통해서만 접근이 가능하다.
- 일반적으로 c/c++ 언어로 작성되어 함수 호출 형태로 제공한다.
- 커널 영역의 기능을 사용자 모드가 사용 가능하게 한다. 즉 프로세스가 하드웨어에 직접 접근하여 필요한 기능을 사용한다.
매개변수를 운영체제에 전달
-
레지스터를 통한 전송
- 매개변수를 CPU 레지스터 내에 전달한다. 이 경우 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많은 수 있다
-
블록이나 테이블을 통한 전송
- 매게변수를 메모리에 저장하고 메모리의 주소가 레지스터에 전달된다.
-
스택을 통한 전송
- 매게변수는 프로그램에 의해 스택으로 전달되고 운영체제에 의해 꺼내진다.
여기서 두번째 방법을 가장 선호합니다. 그 이유는 전달되는 매개변수들의 개수나 길이를 제한하지 않기 때문입니다.!
시스템 콜의 유형
-
프로세서 제어(process Control)
- 끝내기(end), 중지(abort)
- 적재(load), 실행(execute)
- 프로세스 생성(create process)
- 프로세스 속성 획득과 설정(get process attribute and set process attribute)
- 시간 대기(wait time)
- 사건 대기(wait event)
- 사건을 알림(signal event)
- 메모리 할당 및 해제 : malloc, free
-
파일 조작(file manipulation)
- 파일 생성(create file), 파일 삭제(delete file)
- 열기(open), 닫기(close)
- 읽기(read), 쓰기(write), 위치 변경(reposition)
- 파일 속성 획득 및 설정(get file attribute and set file attribute)
-
장치 관리(Device Management)
- 장치를 요구(request devices), 장치를 방출release device)
- 읽기, 쓰기, 위치 변경
- 장치 속성 획득, 장치 속성 설정
- 장치의 논리적 부착(attach) 또는 분리(detach)
-
정보 유지(Information maintenance)
- 시간과 날짜의 설정과 획득(time)
- 시스템 데이터의 설정과 획득(date)
- 프로세스 파일, 장치 속성의 획득 및 설정
-
통신(Communication)
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
- 메세지 전달 모델 : 정보를 교환하기 위하여 메세지를 주고 받음
- 공유 메모리 모델 : 다른 프로세스가 가지고 있는 메모리 영역에 대한 접근을 위하여 시스템 호출 사용