louie.log
로그인
louie.log
로그인
[운영체제 2주차] 컴퓨터 시스템의 구조
Louie
·
2022년 2월 16일
팔로우
1
운영체제
1
컴퓨터시스템의 구조
운영체제의 종류
공개 소프트웨어 : Linux, Android
비공개 소프트웨어 : Windows
오픈 소스(공개 소프트웨어)의 장점
대부분 무료로 다운받을 수 있고 수정할 수 있어서 개발 비용이 적게 든다.
클라이언트가 문제점과 해결책을 자유롭게 공유해줄 수 있어서 문제점이 생겨도 상대적으로 빠르게 해결할 수 있다.
클라이언트가 오픈 소스에 기여할 수 있어서 기술의 발전 속도가 빠르다.
운영체제의 분류
동시 작업 여부
단일 작업(single tasking) : 한 번에 하나의 작업만 처리한다. (ex : MS-DOS)
다중 작업(multi tasking) : 동시에 여러개의 작업을 처리한다. (ex : UNIX, MS Windows)
요즘 운영체제는 대부분 다중 작업을 지원한다.
사용자의 수
단일 사용자 : MS-DOS, MS Windows
다중 사용자 : UNIX
처리 방식
일괄 처리(batch processing)
작업 요청을 일정량 만큼 모아서 한꺼번에 처리한다.
작업이 완전히 종료될 때까지 기다려야 한다.
시분할 처리(time sharing)
여러 작업을 수행할 때 컴퓨터 자원을 일정한 시간 단위로 분할하여 사용한다.
일괄 처리 시스템에 비해 짧은 응답 시간을 가진다.
interactive한 방식이다.
실시간 처리(Realtime OS)
정해진 시간 안에 어떠한 일이 반드시 종료됨이 보장되어야 하는 실시간시스템을 위한 OS
예) 원자로/공장 제어, 미사일 제어, 반도체 장비, 로보트 제어 등 분야에 사용
실시간 시스템의 개념 확장
Hard Realtime System(경성 실시간 시스템)
데드라인이 보장되지 않으면 아주 치명적인 결과가 나올 때 사용
Soft Realtime System(연성 실시간 시스템)
데드라인을 지키지 못해도 치명적인 문제가 있지는 않을 때 사용
몇 가지 용어
멀티 태스킹, 멀티 프로세스 : 컴퓨터 전반에서 여러 작업을 동시에 수행
멀티 프로그래밍 : 여러 프로그램이 메모리에 올라가 있음을 강조
Time sharing : CPU의 시간을 분할하여 나누어 쓴다는 의미를 강조
위의 내용들은 모두 비슷하지만 무엇을 강조하느냐에 따라 다른 표현을 사용할 수도 있다.
멀티 프로세서 : 하나의 컴퓨터에 CPU(processor)가 여러 개 있는 것을 의미, 위의 용어들과는 달리 하드웨어 적으로 CPU의 개수가 다르다.
유닉스(UNIX)
코드의 대부분을 C언어로 작성(코드의 가독성이 높아짐(생산성 향상))
유닉스 개발 당시에는 어샘블리어로 운영체제를 개발했다고 한다.
높은 이식성
최소한의 커널 구조(성능 향상)
시스템에 맞는 확장에 용이
오픈 소스
프로그램 개발에 용이
멀티 태스킹 지원
다양한 버전
컴퓨터 시스템 구조
CPU의 작업이 끝날 때 인터럽트가 발생했었다면 CPU를 OS에게 할당해준다. (Mode bit = 0)
OS에서는 인터럽트에 대응하는 처리를 해준다.
레지스터 : 메모리보다 빠르고 정보를 저장할 수 있음
PC(Program Counter) : 다음번에 실행할 메모리의 주소를 가지고 있는 레지스터, 인터럽트가 발생하면 PC는 운영체제의 주소를 가진다.
Mode bit
사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
Mode bit은 두 가지 모드의 operation을 지원한다.
0 = 모니터 모드(커널 모드, 시스템 모드) : OS 코드 수행
보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 “특권명령”으로 규정한다.
1 = 사용자 모드 : 사용자 프로그램 수행
사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅하고
인터럽트나 Exception 발생 시 Mode bit을 0으로 셋팅한다.
Timer
특정 프로그램이 CPU를 독점하는 것을 막음
time sharing을 구현하기 위해 널리 이용됨
현재 시간을 계산하기 위해서도 사용
동작 방식
CPU를 다른 인스트럽션을 실행하기 전에 Timer에 값을 셋팅한다.
타이머는 매 클럭 틱 때마다 1씩 감소한다.
타이머 값이 0이 되면 타이머 인터럽트가 발생한다.
타이머 인터럽트가 발생한다면 CPU의 제어권이 운영체제에게 넘어간다.
인터럽트(Interrupt)
인터럽트 당한 시점의 레지스터와 PC를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
넓은 의미의 인터럽트는 아래 내용을 모두 포함한다.
Interrupt(하드웨어 인터럽트) : CPU가 아닌 다른 하드웨어 장치가 CPU에게 어떠한 정보를 알려줄 때 발생하는 것
Trap(소프트웨어 인터럽트) : 소프트웨어에서 발생하는 인터럽트이다. Exception이 발생하거나 시스템 콜을 사용하기 위해서 직접 발생 시키기도 한다.
현대의 운영체제는 인터럽트에 의해 구동된다.
인터럽트 용어
인터럽트 벡터
해당 인터럽트의 처리 루틴 주소를 가지고 있음
인터럽트 처리 루틴(=Interrupt Service Routine, 이터럽트 핸들러)
해당 인터럽트를 처리하는 커널 함수
시스템 콜(Sysyem Call)
사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것
소프트웨어 인터럽트를 통해서 운영체제에게 CPU 제어권을 넘겨준다.
CPU 동작에서의 시스템 콜 예시
IO와 관련된 기계어를 사용하려면 특권명령이 필요하다.
사용자 프로그램에서 IO 장치에게 요청할 때는 특권명령이 없기 때문에 OS에게 CPU를 넘겨주는데 이것이 시스템 콜이다.
Device controller
해당 I/O 장치를 관리하는 일종의 작은 CPU
CPU는 device controller에게 I/O 장치의 요청을 보낸다.
device controller는 I/O가 끝났다면 interrupt로 CPU에 그 사실을 알린다.
제어 정보를 위해 control register, status register를 가진다.
local buffer를 가진다.
local buffer : CPU의 작업 공간인 메모리처럼 local buffer라는 작업 공간이 있다.
device driver(장치 구동기) : CPU가 실행하는 OS 코드 중 각 장치별 처리 루틴을 정하는 software
동기식 입출력과 비동기식 입출력
동기식 입출력 (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가 끝나면 인터럽트를 통해 알려준다.
DMA(Direct Memory Access)
메모리에 접근 가능한 컨트롤러
인터럽트가 발생 시 수행하고 있는 작업을 중단하고 CPU가 local buffer에 있는 값을 메모리에 복사하는 과정이 CPU의 효율을 떨어트리기 때문에 만들어짐
DMA controller가 직접 local buffer에 있는 값을 메모리에 복사하고 CPU에 인터럽트를 한번만 발생시킴
바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴
서로 다른 입출력 명령어(기계어)
I/O를 수행하는 special instruction에 의해
I/O 장치를 접근하는 기계어와 Memory를 접근하는 명령어가 따로 있다.
Memory Mapped I/O에 의해
Memory를 접근하는 명령어를 통해서 I/O 장치도 접근하는 방법이다.
Louie
백엔드 개발자를 준비하고 있는 Louie입니다.
팔로우
이전 포스트
2월 9~10일 회고
다음 포스트
[일일 회고] 3월 2일
4개의 댓글
댓글 작성
kukim
2022년 2월 18일
루이도 OS 열심히 공부하시는군요 👍
1개의 답글
케이
2022년 2월 22일
👍🏻
1개의 답글
루이도 OS 열심히 공부하시는군요 👍