컴퓨터 부팅시 운영체제가 작동하는 과정과 시스템 호출

minhee·2020년 4월 27일
1
post-custom-banner

컴퓨터의 부팅과정

  1. 전원이 켜질 때 ROM에 저장된 초기 프로그램을 실행

  2. 초기 프로그램은 메모리, CPU 레지스터 등을 초기화

  3. 이후에 운영체제를 찾아서 메모리에 적재

  4. 운영체제는 첫 번째 프로세스를 즉시 실행

  5. 인터럽트가 발생하면서 CPU가 각종 작업을 처리

1번에서의 초기 프로그램은 바이오스라고 이야기 할 수 있다 !.! 바이오스는 ROM에 저장된 초기 프로그램으로 가장 기본적인 컴퓨터의 입출력을 처리하는 소프트웨어이다.
5번에서 말하는 인터럽트에 대해 조금 더 알아봅시다.

인터럽트

  • 인터럽트는 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것이다.

  • 인터럽트는 소프트웨어 인터럽트와 하드웨어 인터럽트로 나눌 수 있다.

소프트웨어 인터럽트

  • CPU 내부에서 자신이 실행한 명령, CPU의 명령 실행에 경우 발생한다
    ex)
  1. 존재하지 않는 메모리 주소에 접근할 때

  2. 나눗셈을 0으로 나누고자 하는 경우

하드웨어 인터럽트

  • CPU 외부의 주변장치로부터 요구되는 것
    ex)
  1. 기계검사 인터럽트

    • 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제가 발생한 경우
  2. 외부 인터럽트

    • 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
  3. 입출력 인터럽트

    • 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
  4. 프로그램검사 인터럽트

    • 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제가 발생한 경우

인터럽트 처리 방법

방법 1

  1. 어떤 종류의 인터럽트인지 확인

  2. 인터럽트 핸들러를 호출하여 인터럽트를 처리

여기서 인터럽트 핸들러란 인터럽트 접수에 의해 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴으로 원인에 따라 각각 존재하며 작업을 마치는 데 걸리는 시간도 다양합니다.

방법 2

  1. 인터럽트가 요청되면 인터럽트 서비스 루틴의 주소를 가리키는 포인터들로 구성된 인터럽트 벡터테이블을 참조

  2. 참조된 포인터가 가르키는 인터럽트 처리 루틴을 호출하여 인터럽트를 처리

    위 사진은 백터테이블로 인터럽트의 종류에 따라서 어느 위치에 가서 인터럽트 서비스를 처리하는지 적어놓은 테이블입니다.

이때 방법 1 보다 방법 2를 사용합니다. 방법 1은 운영체제가 모든 인터럽트 처리 루틴을 가지고 있어야 해 메모리에 제약이 있습니다.

인터럽트 처리 루틴

  1. 인터럽트 요청 검사

  2. 인터럽트 단계

    • 인터럽트 소스 확인
    • 인터럽트 서비스 루틴 실행 준비 이때 복귀할 때 필요한 최소환의 정보를 stack에 저장
  3. 인터럽트 핸들러 실행

  4. 인터럽트 리턴

    • 실행이 중단되었던 프로그램 다시 실행

시스템 호출

  • 운영체제가 제공하는 서비스에 대한 프로그래밍 인터페이스로 하드웨어의 상세한 동작을 추상화하고 운영체제를 통해서만 접근이 가능하다.
  • 일반적으로 c/c++ 언어로 작성되어 함수 호출 형태로 제공한다.
  • 커널 영역의 기능을 사용자 모드가 사용 가능하게 한다. 즉 프로세스가 하드웨어에 직접 접근하여 필요한 기능을 사용한다.

매개변수를 운영체제에 전달

  1. 레지스터를 통한 전송

    • 매개변수를 CPU 레지스터 내에 전달한다. 이 경우 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많은 수 있다
  2. 블록이나 테이블을 통한 전송

    • 매게변수를 메모리에 저장하고 메모리의 주소가 레지스터에 전달된다.
  3. 스택을 통한 전송

    • 매게변수는 프로그램에 의해 스택으로 전달되고 운영체제에 의해 꺼내진다.

여기서 두번째 방법을 가장 선호합니다. 그 이유는 전달되는 매개변수들의 개수나 길이를 제한하지 않기 때문입니다.!

시스템 콜의 유형

  1. 프로세서 제어(process Control)

    • 끝내기(end), 중지(abort)
    • 적재(load), 실행(execute)
    • 프로세스 생성(create process)
    • 프로세스 속성 획득과 설정(get process attribute and set process attribute)
    • 시간 대기(wait time)
    • 사건 대기(wait event)
    • 사건을 알림(signal event)
    • 메모리 할당 및 해제 : malloc, free
  2. 파일 조작(file manipulation)

    • 파일 생성(create file), 파일 삭제(delete file)
    • 열기(open), 닫기(close)
    • 읽기(read), 쓰기(write), 위치 변경(reposition)
    • 파일 속성 획득 및 설정(get file attribute and set file attribute)
  3. 장치 관리(Device Management)

    • 장치를 요구(request devices), 장치를 방출release device)
    • 읽기, 쓰기, 위치 변경
    • 장치 속성 획득, 장치 속성 설정
    • 장치의 논리적 부착(attach) 또는 분리(detach)
  4. 정보 유지(Information maintenance)

    • 시간과 날짜의 설정과 획득(time)
    • 시스템 데이터의 설정과 획득(date)
    • 프로세스 파일, 장치 속성의 획득 및 설정
  5. 통신(Communication)

    • 통신 연결의 생성, 제거
    • 메시지의 송신, 수신
    • 상태 정보 전달
    • 원격 장치의 부착 및 분리
    • 메세지 전달 모델 : 정보를 교환하기 위하여 메세지를 주고 받음
    • 공유 메모리 모델 : 다른 프로세스가 가지고 있는 메모리 영역에 대한 접근을 위하여 시스템 호출 사용
post-custom-banner

0개의 댓글