OS

[운영체제와 정보기술의 원리] 2,3,4장

shininghyunho 2023. 11. 14. 20:34

운영체제란

탄생 배경 : 사용자가 하드웨어를 직접 운용하는것이 어렵기 때문에 대신해줄 소프트웨어가 필요했음.

운영체제 : 소프트웨어 계층과 하드웨어 계층 연결해주는 소프트웨어

커널 : 메모리에 항상 상주해있는 운영체제 코드

 

운영체제 역할

  1. 자원관리자 : 한정된 시스템 자원을 효율적으로 관리 (가장 중요)
  2. 인터페이스 : 사용자가 하드웨어를 직접 사용하지 않고 인터페이스로 쉽게 접근
  3. 보안 및 보호 : 여러 사용자 및 프로그램이 충돌하지 않게 관리, 악성프로그램 방지

자원관리기능

  • CPU 스케쥴링 : 어떤 프로세스에게 CPU를 할당할것인가 (FCFS, Round Robin, 우선순위, ...)
  • 메모리 관리 : 한정된 메로리를 여러 프로세스가 어떻게 나눠 사용할것인가 (고정분할, 가변분할, 가상메모리, ...)
  • 프로세스 관리 : 프로세스의 생성 및 삭제, 자원 할당 및 반환, 프로세스간 협력
  • 파일 관리(어떻게 보관할지), 입출력 관리(데이터를 어떻게 주고 받을건지), ...

 

컴퓨터 구조

CPU : 중앙처리장치. 단순히 주어진 계산만 해주고 명령은 운영체제가 해줘야함.

 

인터럽트 : 하드웨어 주변장치들이 CPU를 사용하고 싶을때 보내는 신호.

(인터럽트가 발생하면 운영체제는 인터럽트 백터에 따라 주어진 인터럽트 루틴(인터럽트 핸들러라고도 함)을 실시함)

컨트롤러 : 하드웨어마다 갖고있는 일종의 CPU.

로컬버퍼 : I/O 작업을 요청하면 컨트롤러가 데이터를 로컬버퍼에 저장. 메모리 역할.

 

 

CPU 서비스가 필요하는 경우 인터럽트 라인을 셋팅. CPU가 명령을 1줄씩 읽을때마다 확인.

하드웨어 인터럽트

하드웨어 컨트롤러같은 하드웨어 장치가 발생시키는 인터럽트

소프트웨어 인터럽트

소프트웨어가 발생시키는 인터럽트

시스템 콜 : 사용자 프로그램이 운영체제 코드를 실행시키고 싶을때 운영체제에게 요청하는 방법.

예외사항 : 0으로 나누거나 잘못된 메모리 접근같은 잘못된 작업시 발생.

 

인터럽트 과정

  • 프로세스 A가 디스크에서 데이터를 읽기 명령 요청. (시스템 콜)
  • CPU 의 제어권이 프로세스 A에서 운영체제로 넘어감 (유저모드 -> 커널모드)
  • 운영체제는 프로세스 A의 현재 상태를 PCB(Process Control Block) 에 저장.
    (실행중이던 코드의 메모리 주소, 레지스터값, 하드웨어 상태 등이 저장.
    나중에 다시 실행하기 위해 문맥(context)을 저장함.)
  • 운영체제는 인터럽트 벡터(인터럽트 번호마다 어떤 액션을 해야하는지 적힌 자료구조)을 확인.
    이에따라 정해진 인터럽트 처리루틴을 통해 인터럽트 처리.
    • 비동기 요청인 경우 다시 커널모드 -> 유저모드 변경
    • PCB에 저장된 문맥으로부터 CPU 복구후 프로세스 A는 다시 실행

    • 동기 요청인 경우 프로세스 A는 runing state -> block state로 변경
    • 스케쥴링에 따라 다음 프로세스가 실행
  •  
  • 디스크 컨트롤러는 데이터를 로컬 버퍼로 읽어옴. (장치마다 큐가 존재해 순서대로 처리)
  • 읽기 작업이 모두 끝났으면 컨트롤러는 CPU에 인터럽트 라인 셋팅 (하드웨어 인터럽트)
  • 실행중이던 프로세스 B는 CPU 권한을 잃고 유저모드 -> 커널모드 진입.
  • 로컬버퍼에 프로세스 A가 요청한 데이터를 메모리로 읽어옴.
  • 동기 요청인 경우 프로세스 A는 block state -> ready state로 진인해 CPU 기다림.

 

DMA(Direct Message Access) : 일종의 컨트롤러로써,
하드웨어 로컬버퍼에서 메모리로 읽어오는 작업 CPU 대신 진행해줌.
로컬버퍼에 너무 자주 접근해 인터럽트가 빈번하게 발생 -> DMA 가 대신해 CPU 업무 분배.
byte 단위로 읽어오는게 아니라 block 이라는 큰 단위로 읽어옴.
데이터를 메모리로 모두 읽어오면 인터럽트를 발생시켜 해당 작업의 완료를 안내함.

 

모드비트 : 1로 셋팅되어야지 운영체제만의 특권명령을 수행가능. 커널모드로 진입할때 셋팅됨.
사용자 프로그램의 잘못된 메모리 접근을 방지.

 

타이머 : 프로세스의 CPU 점유시간을 체크하는 하드웨어. 0이 되는 순간 인터럽트 발생.
시분할 시스템에서 CPU 독점 방지.

 

주소공간

프로그램마다 각자의 독립된 주소공간을 갖게됨.

  • Code : 프로그램의 코드들이 운영체제가 실행할수있는 기계어 코드로 저장됨.
    읽기만 가능. Text라고도 함.
  • Data : 전역 변수같은 데이터 저장. (초기화 x 데이터는 BSS에 저장)
  • Stack : 함수 호출로 부터 복귀할 주소나 임시 변수들 저장.
  • Heap : 동적할당한 값들이 저장. C의 malloc, Java의 new

 

 

운영체제도 하나의 프로그램이므로 독립된 주소공간을 가짐.

  • Code : CPU, 메모리같은 자원을 관리하기 위한 코드, 사용자에게 제공할 인터페이스 코드, 시스템 콜, 인터럽트 처리 루틴등.
  • Data : 각종 자원관리를 위한 자료구조, 프로세스마다 문맥을 저장하는 PCB.
  • Stack : 프로세스마다 별도의 스택을 가짐. 커널모드에서 함수호출이 이루어지면 프로세스 스택이 아닌 커널 스택에 복귀 주소가 저장.