시스템 구조와 프로그램 실행

Lee Jeong Min·2022년 4월 22일
0

운영체제

목록 보기
2/12
post-thumbnail
post-custom-banner

운영체제를 설명하기에 앞서, 하드웨어적인 것을 설명

컴퓨터 시스템 구조

CPU와 메모리로 구성된 컴퓨터와 그 외 I/O Device로 구성

컨트롤러들이 각 디바이스에 붙어있어서 작은 CPU 역할을 함

이 역할을 하는데 필요한 작은공간 → local buffer라고 함

CPU는 메모리로부터 하나의 instruction 가져와 실행시키는 역할(program counter 주소에서 가져와 명령 실행)

register: CPU 안에 메모리보다 더 빠르면서 정보를 저장할 수 있는 작은 공간

mode bit: 사용자의 프로그램인지 OS인지 구별하는 역할

Interrupt line: CPU는 항상 메모리에 있는 instruction을 실행시키는데, 키보드나 디스크와 같이 I/O Device에서 어떤 요청이 들어왔을 때, 이를 인터럽트 라인에 세팅하고 마이크로 프로세서에게 알려 처리하도록 함

timer: 사용자 프로그램중 무한루프틑 도는 것과 같은 프로그램이 있을 때, 타이머를 이용하여 CPU를 선점할 수 있는 시간을 설정하여 이를 방지함. (추가적인 하드웨어, Time sharing을 위한 것)

사용자 프로그램에서 키보드 입력이 들어왔을 때 동작 예시

프로그램에서 키보드 입력 요구(트랩이라는 소프트웨어 인터럽트를 발생시켜 시스템 콜을 함)을 이용하여 인터럽트 벡터가 가리키는 서비스 루틴실행
⬇️
I/O Controller가 요청한 작업이 끝남(키보드를 두드려서 입력한 데이터가 버퍼에 들어옴)
⬇️
키보드 컨트롤러가 CPU인터럽트(하드웨어 인터럽트)를 검
⬇️
인터럽트가 들어오면 CPU 제어권이 프로그램에서 OS로 넘어감
⬇️
운영체제가 인터럽트가 왜 들어왔는지 살펴보고, 입력된 키보드 값을 요청한 프로그램의 메모리공간에 카피
⬇️
방금까지 CPU를 점유하고 있던 프로그램에게 다시 제어권 양도(timer값이 남아 있다면)

디스크를 읽는 과정도 동일함(디스크 컨트롤러가 다 읽으면 인터럽트걸고 순차적으로 진행)

Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치

즉, 현재 권한이 커널모드냐, 사용자 모드냐에 따라 자원에 접근할 수 있는 권한을 부여

Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원

1 사용자 모드: 사용자 프로그램 수행
0 모니터 모드: OS 코드 수행
  • 보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 ‘특권명령'으로 규정
  • InterruptException 발생 시 하드웨어가 mode bit을 0으로 바꿈
  • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

모니터모드: 커널모드, 시스템 모드

타이머

  • 정해진 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킴
  • 타이머는 매 클럭 틱 때마다 1씩 감소
  • 타이머 값이 0이 되면 타이머 인터럽트 발생
  • CPU를 특정 프로그램이 독점하는 것으로부터 보호

이 타이머는 time sharing을 구현하기 위해 널리 이용된다. 또한 현재 시간을 계산하기 위해서도 사용된다.

Device Controller

I/O device controller

  • 해당 I/O 장치유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register를 가짐
  • local buffer를 가짐(일종의 data register)

I/O는 실제 device와 local buffer 사이에서 일어나고, Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

device driver(장치 구동기): OS 코드 중 각 장치별 처리루틴 → software

device controller(장치 제어기): 각 장치를 통제하는 일종의 작은 cpu → hardware

DMA controller

CPU에 인터럽트가 많이 걸리면 효율적으로 동작할 수 없음. 그래서 DMA(Direct Memory Access) controller가 생김

원칙적으로 메모리에 CPU만 접근할 수 있지만, DMA를 두게 되면 CPU도 접근할 수 있고 DMA도 접근 가능.

둘이 접근하는 것을 중재하는 역할을 memory controller가 제어

DMA 컨트롤러의 역할은 I/O Device의 인터럽트가 발생했을 때, 로컬 버퍼에 있는 내용을 메모리에 복사하여(메모리에 block 단위로 직접 전송) 그 작업이 다끝나면 CPU에 인터럽트 한번만 걸어서 보고를 함.

입출력의 수행

모든 입출력 명령은 특권 명령이다.

사용자 프로그램은 그럼 어떻게 I/O를 하는가?

  • 시스템콜(system call)
    • 사용자 프로그램은 운영체제에게 I/O 요청
  • trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
  • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
  • 올바른 I/O 요청인지 확인 후 I/O 수행
  • I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김

인터럽트

인터럽트

  • 인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.

Interrupt (넓은 의미)

  • Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
  • Trap(소프트웨어 입터럽트)
    • Exception: 프로그램이 오류를 범한 경우
    • System call: 프로그램이 커널 함수를 호출한 경우 (사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출함)

인터럽트 관련 용어

  • 인터럽트 벡터
    • 해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴(Interrupt Service Routine, 인터럽트 핸들러)
    • 해당 인터럽트를 처리하는 커널 함수

→ 인터럽트의 종류가 여러개 있고, 각각 해야할 일이 다르기 때문에 각 인터럽트가 처리해야할 일을 인터럽트 처리 루틴에 담아둠

어디에 있는 함수들을 실행해야 하는지? → 인터럽트 벡터에 명시해둠

현대의 운영체제는 인터럽트에 의해 구동됨

동기식 입출력과 비동기식 입출력

동기식 입출력 (synchronous I/O)

  • I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감
  • 구현 방법 1
    • I/O가 끝날 때까지 CPU를 낭비시킴
    • 매시점 하나의 I/O만 일어날 수 있음
  • 구현 방법 2
    • I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음
    • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움
    • 다른 프로그램에게 CPU를 줌

비동기식 입출력 (asynchronous I/O)

  • I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감

두 경우 모두 I/O의 완료는 인터럽트로 알려줌

서로 다른 입출력 명령어

  • I/O를 수행하는 special instruction에 의해
  • Memory Mapped I/O에 의해

좌측에 있는 그림은 메모리 접근하는 instruction따로, I/O를 위한 special instruction을 위한 것 따로를 구분해놓은것

우측에 있는 그림은 I/O 장치도 메모리의 연산주소를 붙여서 같이 접근(ex: 100번대 메모리 주소, 1000번대 I/O 주소) → 이를 memory Mapped I/O라고 부름

저장장치 계층 구조

위 3가지는 바이트 단위로 접근이 가능하기 때문에 CPU가 실행시킬 수 있음. 세컨더리 부분은 섹터 단위로 접근

프로그램의 실행 (메모리 load)

프로그램은 파일형태로 파일시스템에 존재

프로그램을 실행시키게 되면 가상메모리를 거쳐 물리적인 메모리로 올라감(메모리 주소 변환이라는 하드웨어 계층을 통해)

어떤 프로그램을 실행시키게 되면 주소공간 형성 → 프로세스 A의 Address space (stack, data, code)

이를 물리적인 메모리에 올려서 사용하는데, 다 올리면 메모리가 부족하기 때문에 당장 필요한 부분만 올려서 사용

스왑 공간이라는 disk에 나머지 저장하고, 전원이 나가면 안에 있는 데이터가 의미없어짐(파일 시스템은 영구 보존의 목적!)

커널 주소 공간의 내용

code: 커널 자체의 코드

data: 하드웨어 관리를 위한 자료구조, PCB(현재 실행중인 프로그램을 관리하기 위한 자료구조)

stack: 운영체제도 함수 구조로 짜여있기 때문에 stack을 이용

사용자 프로그램이 사용하는 함수

함수(function)

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로그램의 실행 파일에 포함되어 있다.
  • 커널 함수
    • 운영체제 프로그램의 함수
    • 커널 함수의 호출 = 시스템 콜

사용자 정의, 라이브러리 함수는 프로세스의 주소 공간에 있고, 커널 함수는 커널 주소 공간에 있음

커널 함수를 실행하려면 system call을 통해 실행시켜야 함!

프로그램의 실행

프로세스 A의 관점에서 본 프로그램 실행 과정

참고사이트

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

profile
It is possible for ordinary people to choose to be extraordinary.
post-custom-banner

0개의 댓글