CS/운영체제

[운영체제] KOCW 반효경 교수님 강의 - 4. System Structure & Program Execution 2

pythaac 2022. 3. 27. 21:38
  • 인터럽트
    • 인터럽트마다 처리해야될 작업이 커널에 함수로 정의되어있음
    • 인터럽트 벡터 : 인터럽트 종류를 식별
    • 인터럽트 벡터로 커널의 주소를 식별하여 CPU가 처리해야할 작업을 찾음
  • 인터럽트의 종류
    • 하드웨어 인터럽트(Interrupt)
      device controller와 같은 하드웨어가 발생시킨 인터럽트
    • 소프트웨어 인터럽트(Trap)
      1) 시스템 콜 : 사용자 프로그램이 운영체제 함수를 호출
      2) Exception : 프로그램 오류에 의한 인터럽트
    • Timer
      프로세스가 할당한 시간만큼 CPU를 사용하면 인터럽트를 보내는 하드웨어
  • CPU
    • CPU는 매번 PC의 주소 작업만 처리
    • mode bit에 따라 0이면 운영체제로 모든 명령어 처리, 1이면 사용자 프로그램으로 제한된 명령어 처리

  • 동기식 입출력 (Synchronous I/O)
    • Synchronous
      - 시간적으로 맞추는 것
    • I/O 장치까지 직접가서 결과를 보고 오는 것
    • I/O 요청 후 작업이 완료된 후에야 제어가 사용자 프로그램이 다음 일을 진행
    • I/O의 결과가 필요한 경우에 사용
  • 비동기식 입출력 (Asynchronous I/O)
    • I/O 작업 요청 후 다른 작업을 진행
    • I/O 작업의 완료는 인터럽트로 확인
    • 보통 write를 비동기식으로 사용 : storage에 write가 되는 결과가 필요 없기 때문
      - 항상 그런 것은 아님 (storage에 정말 제대로 write가 되었는지 확인이 필요할 수 있음)
  • 비동기식 입출력을 사용하는 이유
    • I/O 작업은 시간이 오래걸림
    • 프로세스가 I/O를 기다리는 동안 CPU를 점유하는 것은 낭비
    • 비동기식 입출력은 I/O가 진행되는 동안 다른 프로세스에게 CPU를 넘김
    • + I/O 장치도 한 번에 1가지 일만 진행할 수 있음 (프로세스가 I/O 결과를 기다리기 때문)
  • DMA
    • 원래 CPU만 메모리에 접근 가능
    • 그러나 CPU가 너무 많은 인터럽트를 당함 (키보드를 누를 때마다 인터럽트)
    • DMA는 메모리로 접근이 가능한 controller이며, CPU 대신 메모리와 device buffer의 데이터를 복사
    • 일정 block마다 복사가 끝나면 CPU에게 인터럽트로 알림

  • I/O의 종류
    • 메모리만 접근(일반적인 I/O)
      • load, store와 같이 메모리에 접근하는 명령어가 있음
    • I/O 장치를 접근
      • 각 디바이스에 접근하는 명령어가 별개로 있음
      • Memory Mapped I/O
        - I/O 디바이스에 메모리 주소를 매겨서 메모리에 접근하는 명령어로 접근할 수 있음

  • 저장장치 계층 구조
    • 위로 갈수록 speed가 빨리지고, 가격이 비싸짐
    • 초록색 영역이 휘발성
    • Primary
      • CPU에서 직접 접근할 수 있는 메모리
      • Byte 단위로 접근이 가능해야함
    • Secondary
      • CPU에서 직접 접근이 불가능한 메모리
      • 하드 디스크는 sector 단위
    • Cache Memory
      • CPU가 1클럭당 1개 명령어 처리
      • 메인 메모리는 10~100 싸이클 정도 걸림
      • 두 속도 차이를 완충하기 위해 사용
      • 메인 메모리보다 용량이 작아서 당장 필요한 것만 올림 (재사용 목적)

  • 프로그램의 실행
    • 프로그램은 보통 실행파일 형태로 파일 시스템에 저장
    • 실행 파일을 실행
    • Virtual memory 생성 : 프로세스만의 독자적인 공간 (stack, data, code)
    • 메모리에 올라와서 프로세스가 됨 (종료시 메모리에서 내려감)
    • 메모리에 프로그램 전체가 올라오지 않고 필요한 부분만 올라옴
    • 당장 필요하지 않은 부분은 disk의 swap area에 내려놓음
    • 물리 메모리에서 Virtual memory로 주소를 변환하는 계층이 필요

  • 커널 주소 공간
    • Code
      • 시스템 콜, 인터럽트 처리 코드
      • 자원 관리를 위한 코드
    • Data
      • 운영체제가 사용하는 자료구조들이 정의됨
      • 하드웨어 종류마다 자료구조를 정의
      • 각 프로세스를 관리하기위한 자료구조(PBC)
    • stack
      • 운영체제도 함수 구조로 이루어진 프로그램
      • 프로세스들이 커널 코드의 함수를 호출함
      • 어떤 프로세스가 함수를 호출했는지 확인하기 위해 사용자마다 스택을 따로 관리

  •  함수
    • 사용자 정의 함수
      - 내가 정의한 함수
      - 프로세스 code 영역에 저장
    • 라이브러리 함수
      - 가져다 쓴 함수
      - 프로세스 code 영역에 저장
    • 커널 함수
      - 커널 내부의 함수
      - 커널 code 영역에 저장
    • jump
      - 주소의 jump는 virtual memory 안에서만 허용