2020-10-24 운영체제 컴퓨터 시스템 구조 (강의정리)
컴퓨터 시스템 구조
- 보통 컴퓨터라고 부르는건 CPU, 메모리를 지칭한다.
- 메모리 : CPU의 작업공간, CPU는 매순간(클럭) 메모리에서 기계어를 읽어 프로그램을 실행시킨다
- mode bit : cpu에서 실행되는게 사용자 프로그램인지, os인지 구별
- 무한루프에 빠지는걸 방지하게 위해 프로그램을 실행할때, timer가 시간설정을 하고 시간이 지나면 interrupt를 보낸다.
- 인터럽트 요청이 들어오면 CPU 제어권이 OS한테 넘어간다.
Modebit
- 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 OS에 피해가 가지 않도록 보호장치 필요
- Mode bit을 통해 하드웨어적으로 2가지 operation지원
- 1 사용자모드 : 사용자프로그램 수행
- 제한된 명령어만 실행할 수 있다.
- 0 모니터모드 : OS코드 수행
- 아무 명령어나 실행할 수 있다.
- interrupt, exception이 발생하면 하드웨어가 mode bit을 0으로 바꾼다.
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 변경
- 1 사용자모드 : 사용자프로그램 수행
Timer
- 정해진 시간이 흐른 뒤 OS에게 제어권이 넘어가도록 인터럽트 발생
- 타이머는 매 클럭 틱마다 1씩 감소
- 타이머값이 0이 되면 타이머 인터럽트 발생
- CPU를 특정 프로그램이 독점하는 것으로부터 보호
- timesharing을 구현하기 위해 널리 이용
- 현재시간을 계산하기 위해서도 이용
Device Controller
- I/O Device Controller
- I/O 장치 유형을 관리하는 작은 CPU
- 제어 정보를 위해 control register, status register를 가진다.
- local buffer를 가진다(data register)
- I/O는 실제 device와 local buffer 사이에 일어난다. CPU가 버퍼에 접근해서 데이터를 메모리에 복사한다.
- Device Controller는 I/O가 끝났을 경우 interrupt로 CPU에게 알린다.
DMA(Direct Memory Access) Controller
- 메모리를 접근할 수 있는 device는 cpu만 있었는데, interrupt를 많이 당해서 DMA Controller도 메모리에 접근할 수 있다.
- 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
- CPU의 중재없이 device controller가 device의 buffer storage의 내용을 메모리에 block단위로 직접 전송
- 바이트 단위가 아니라 block단위로 인터럽트 발생시킴
입출력(I/O)수행
- 모든 입출력 명령은 특권 명령
- 사용자 프로그램은 어떻게 I/O하는가?
- 시스템콜(System call) : 사용자 프로그램은 OS에게 I/O 요청
- trap을 사용하여 인터럽트 벡터의 특정 위치로 이동
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 올바른 I/O요청인지 확인 후 I/O 수행
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮김
인터럽트
- 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
- 보통은 하드웨어 인터럽트를 인터럽트라고한다.
- 넓은 의미
- interrupt(하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트)
- Exception : 프로그램이 오류를 발생할때
- system call : 프로그램이 커널 함수를 호출하는 경우
- 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있다.
- 인터럽트 처리루틴(인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수
동기식 입출력 비동기식 입출력
- 동기식 입출력(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 완료는 인터럽트로 가르쳐준다.
저장장치 계층 구조
- 위로갈수록 빠르지만 단위공간당 가격이 비싸고 용량이 작다.
- main memory, cache memory, register는 휘발성이다. 그 아래는 비휘발성
- 최근에는 main memory도 비휘발성인 요소가 들어가는 반도체도 등장
- Primary(execturable) : CPU에서 직접 접근가능한 메모리 매체. => register, cache, main memory
- CPU가 접근하려면 byte단위로 접근 가능한 매체여야한다.
- Secondary : CPU가 직접접근 못하는 매체.
- Disk들은 바이트 단위가 아닌 Sector단위로 접근한다.
- caching : 재사용을 목적으로 한다.
프로그램의 실행(memory load)
- 프로그램은 실행파일형태로 File System에 저장. 실행시키면 메모리로 올라가서 프로세스가 된다.
- 물리적인 메모리로 바로 올라가는게 아닌 virtual memory에 우선 올라간다.
- 프로그램을 실행하면 해당 프로그램의 address space가 형성된다. address space는 stack, data, code로 구성되어있다.
- 모든 프로그램이 독자적인 Address Space를 가지고 있는데, 프로그램을 실행시킬때, 물리적인 메모리에 올리는거다.
- 실제로 virtual memory에 있는 stack, code, data가 연속적으로 할당되는게 아니라 일부는 swap area 일부는 main memory에 존재한다.
커널의 주소공간내용
- code : 커널코드
- 시스템콜, 인터럽트 처리코드
- 자원관리를 위한 코드
- 편리한 서비스 제공을 위한 코드
- stack : processA, B, C … 의 스택들이 각각 존재
- data : ProcessA(PCB), ProcessB(PCB), CPU, memory, disk
사용자 프로그램이 사용하는 함수
- 사용자 정의 함수 : 자신이 정의한 함수
- 라이브러리 함수 : 갖다쓰는 함수, 프로그램의 실행파일에 포함되어있다.
- 커널함수 : OS의 함수, 커널함수의 호출 = 시스템콜, 커널코드안에 정의가 되어있어서 내프로그램안에 없다. 호출만 할 수 있다.
Written on October 24, 2020