[OS]2.System Structure & Program Execution

dsfasdfsfsfds·2022년 4월 17일
0

운영체제

목록 보기
2/2

안녕하세요 제제로입니다😊
컴퓨터 시스템 구조와 프로그램 실행에 대해서 강의를 들은 것을 정리해보겠습니다.

컴퓨터 시스템 구조

Mode bit

사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치가 필요합니다.
따라서 Mode bit을 통해 하드웨어적으로 두 가지 모드의 Operation을 지원합니다.

Mode bit

  • 1 - 사용자 모드: 사용자 프로그램 수행
  • 0 - 모니터 모드(커널 모드, 시스템 모드): OS 코드 수행

보안을 해칠 수 있는 중요한 명령어(ex. I/O)는 커널 모드에서만 수행 가능하도록 돼있습니다.
Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿉니다.
사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 바꿉니다.

Timer

사용자 프로그램이 무작정 CPU를 점유하고 있으면은 손해입니다. CPU를 특정 프로그램이 독점하는 것으로부터 보호하기 위해 운영체제가 사용자 프로그램에게 CPU를 넘겨줄 때 타이머에게 정해진 시간을 할당한 후에 제어권을 넘깁니다. 그러면 타이머는 타이머 값이 0이 되면 타이머 인터럽트를 발생 시켜 운영체제에게 다시 제어권이 넘어가도록 합니다.

I/O Device Controller

해당 I/O 장치유형을 관리하는 일종의 작은 CPU입니다. 제어 정보를 위해 control register, status register를 가지고 local buffer를 가집니다. I/O는 실제 device와 local buffer 사이에서 일어나고 device controller가 가져온 I/O결과를 local buffer에 저장합니다. I/O가 끝났을 경우 interrupt로 CPU에게 끝났다는 사실을 알리고 OS로 제어권이 넘어가 interrupt 가 I/O 때문에 발생했는지 판단하고 그렇다면 CPU는 device의 local buffer에 들어가 내용물을 메모리에 copy해옵니다.

  • Device Driver
    • OS 코드 중 각 장치별 처리 루틴 -> software
  • Device Controller
    • 각 장치를 통제하는 일종의 작은 CPU -> hardware

Interrupt Line

CPU가 memory의 instruction이 끝나면 interrupt line을 체크하고, interrupt line에 들어온 것이 있으면 그 interrupt를 실행합니다. interrupt가 실행되면, CPU는 하던 일을 잠시 멈추고, CPU의 제어권이 OS로 넘어가게 됩니다

DMA Controller

Direct Memory Access Controller의 줄임말로 I/O가 빈번히 일어나면 I/O가 발생할 때 마다 interrupt가 발생하게 됩니다. 그렇게 되면 아무래도 CPU 효율이 떨어지는 문제가 발생할 수 있겠죠. 따라서 DMA Controller는 CPU의 중재없이 Device Controller가 local buffer에 Data를 Memory에 block 단위로 직접 전송하도록 합니다. 전송이 완료되면 DMA Controller는 CPU에게 interrupt로 알립니다.

Memory Controller

Memory Controller는 CPU와 DMA Controller가 동시에 메모리에 접근하는 것을 통제해준다.

입출력(I/O)의 수행

모든 입출력 명령은 커널모드 즉 OS만 할 수 있습니다.
그러면 사용자 프로그램은 어떻게 I/O를 할까요??
시스템 콜(system call)을 통해 사용자 프로그램은 운영체제에게 I/O를 요청합니다
그러면 trap(software interrupt)을 사용하여 인터럽트 벡터의 특정 위치로 이동합니다.
제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동하고 올바른 I/O 요청인지 확인 후 I/O를 수행합니다. I/O가 완료되면 제어권을 시스템 콜 다음 명령으로 옮김니다.

  • 인터럽트
    인터럽트 당한 시점의 레지스터와 program counter를 save 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다
    • 하드웨어 인터럽트: 하드웨어가 발생시킨 인터럽트
    • Trap(소프트웨어 인터럽트)
      • Exceptuion: 프로그램이 오류를 범한 경우
      • System call: 프로그램이 커널 함수를 호출하는 경우
  • 인터럽트 벡터
    해당 인터럽트의 처리 루틴 주소를 가지고 있음
  • 인터럽트 처리 루틴
    해당 인터럽트를 처리하는 커널 함수
  • 시스템 콜
    사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출 하는 것

Memory Mapped I/O

Memory 접근하는 Instruction 따로 I/O하는 Special Instruction이 따로 있는 경우가 있고
Memory Mapped I/O는 Memory 주소의 연장주소를 붙인 다음에 Memory 접근과 동일한 방식으로 호출하지만 주소에 따라 I/O Instruction을 호출하는 것입니다.

저장장치 계층 구조


상단으로 갈수록 속도가 빠르고 가격이 비싸서 용량이 작고 하단으로 내려갈수록 속도가 느리고 가격이 싸서 용량이 큽니다. 상단에 있는 기억장치들은 휘발성이고 하단에 있는 기억장치들은 비휘발성의 성질을 가지고 있습니다. CPU는 바이트 단위로 정보를 읽을 수 있는데 하단의 기억장치들은 바이트 단위 접근이 안되서 정보를 읽을 수 없습니다. 상단의 기억장치들은 용량이 작아서 하단의 기억장치들의 저장된 정보를 다 가지고 있지 못합니다. CPU의 작업속도는 엄청 빠른데 상단으로 갈수록 용량이 작아서 많은 정보를 가지고 있지 못합니다. 그렇게 되면 그보다 아래의 기억장치에서 정보를 가져와야 하는데 그렇게 되면 하단 메모리로 내려갈수록 속도라 느려져서 CPU의 작업속도와 차이가 발생합니다. 이 차이를 완화하기 위해서 cache memory를 사용해서 필요한 정보들을 담아놓고 사용할 때 register로 올립니다.

프로그램 실행

프로그램이 실행 돼서 메모리에 올라가서 프로세스가 됩니다. 하지만 바로 메모리에 올라가는 것은 아닙니다.
프로그램을 실행하면 프로세스의 각자 독립접인 가상 메모리 공간이 만들어지고 가상 메모리 공간은 stack,data,code로 구성되어 있습니다. 이 메모리 공간을 바로 물리적인 메모리에 올리는 것은 낭비이기 때문에 당장 필요한 부분만 메모리에 올리게 되고 나머지 부분은 Disk의 Swap area에 올려놓게 됩니다.
커널 영역은 컴퓨터를 부팅하고 나서 항상 메모리에 상주하게 됩니다.

커널 주소 공간의 내용

  • Code
    • 시스템 콜, 인터럽트 처리 코드
    • 자원관리를 위한 코드
    • 편리한 서비스 제공을 위한 코드
  • Data
    • CPU,Memory,Disk등 하드웨어를 관리하기 위한 자료구조
    • 프로세스를 관리하기 위한 자료구조(PCB)
  • Stack
    • Process들의 커널 스택
profile
fdsafsdafsda

0개의 댓글