-
1. 운영체제와 컴퓨터 시스템의 구조Computer Science/Operating System 2022. 2. 21. 13:56728x90
운영체제
사용자 및 응용 프로그램과 하드웨어 사이에서 컴퓨터 시스템의 자원을 효율적으로 관리하기 위한 소프트웨어로써, 부팅 시 메모리에 가장 처음 적재된다.
운영체제는 아래와 같이 GUI, 시스템 호출, 커널, 드라이버로 구성되어 있으며 목적은 다음과 같다.
- 사용자, 응용 프로그램과 관련된 자원 보호
- 컴퓨터 시스템을 편리하게 사용할 수 있는 인터페이스 제공
- 효율적인 자원 관리
여기서 언급되는 효율성이란 주어진 하드웨어 자원으로 최대한의 성능을 낸다는 점이며, 특정 사용자 및 응용 프로그램에 대해 지나친 불이익이 발생하지 않도록 형평성의 문제도 해결해준다.
현대의 일반적인 처리 방식인 시분할 시스템으로 실행중인 프로세스에 각각 일정 시간 CPU를 번갈아 할당해줌으로써 적절히 분배하여 공평하게 쓸 수 있다. 이외 CPU 스케줄링 알고리즘에 따라 프로세스에 할당되는 CPU의 우선순위가 달라질 수 있다.
좁은 범위에서의 운영체제는 커널을 의미하며 운영체제의 핵심적인 부분으로써 메모리에 상주하는 부분이다. 넓은 범위에서는 커널뿐만 아니라 각종 주변 시스템 유틸리티를 포함해 사용자에게 편의를 제공한다.
운영체제의 종류로 서버용(Linux), PC용(Windows, MacOS), 스마트 디바이스용(안드로이드, iOS)로 나뉘는데, 리눅스는 오픈소스 소프트웨어로써 수정가능하며, 아래 사진에 나와있듯 공통적인 용도로 모두 사용 가능하다.운영체제의 기능
커널의 핵심적인 기능은 아래와 같고, 커널에 따라 운영체제의 성능이 달라진다.CPU 스케줄링 및 프로세스 관리 프로세스에 CPU 할당 및 필요한 작업 환경 제공 메모리 관리 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상 메모리 제공 파일 시스템 관리 데이터 저장 및 접근 가능한 인터페이스 제공 입출력 관리 사용자와 상호작용에 필요한 입출력 서비스 제공 프로세스 간 통신 관리 공동 작업을 위한 프로세스 간 통신 환경 지원 CPU 스케줄링의 경우 프로세스 생성부터 완료까지 프로세스를 관리해주는 방식을 의미하며, 프로세스들은 CPU가 우선순위에 맞게 할당되는데, 이 우선순위는 스케줄링 알고리즘에 따라 정해지며 대표적인 알고리즘으로 3가지가 있다.
FCFS(First Come First Served) : CPU 준비 큐에 먼저 들어온 순서대로 CPU를 차지한다.
SJF(Shortest Job First) : 프로세스 실행 시간이 짧은 순서대로 먼저 차지한다.
RR(Round Robin) : CPU를 사용할 수 있는 시간을 일정하게 할당하여 사용하고, 보편적인 방식이다.
메모리 관리는 하드디스크에 있는 프로그램별로 각각의 가상 메모리가 존재하여 여기에서 필요한 페이지만 실제 메모리에 적재하여 사용하고, 메모리의 크기가 제한되어 있기에 용량이 찼을 때는 페이지 교체 알고리즘을 통해서 페이지를 스왑영역으로 내쫓고, 필요한 페이지를 메모리에 적재한다.페이지 교체 알고리즘은 추후 포스팅에서 자세히 다룰 예정이며, LRU(가장 오래 전에 참조한 페이지를 교체하는 방식, 사용할 가능성이 낮아서), LFU(참조횟수가 가장 적은 페이지 교체)라는 알고리즘이 있다는 걸 알고있으면 될 것 같다.
운영체제의 기능에서 추가적으로 디스크 스케줄링과 인터럽트에 관한 개념을 살펴보겠다.디스크 스케줄링은 디스크에 있는 원하는 데이터나 파일을 탐색하기(헤드를 해당 트랙으로 움직이는데 걸리는 시간)까지의 시간이 가장 오래 걸리는데 디스크 스케줄링은 이 탐색시간을 최소화하는 것이 목표이다. 다음 3가지 알고리즘이 대표적이다.
FCFS(First Come First Served) : 데이터를 요청한 트랙의 순서대로 탐색한다.
SSTF(Shortest Seek Time First) : 헤드에서 가장 가까운 거리에 있는 요청순으로 탐색한다.
SCAN : 요청에 대해 한 방향으로만 탐색한 후 디스크 끝에 도달하면 역방향으로 탐색하는 과정을 반복한다.
인터럽트(Interrupt)는 외부 입출력 장치가 늘어남에 따라 작업의 효율성을 향상시키기 위해 나온 입출력 관리 방식으로기존에는 주변 장치가 적은 경우 CPU가 직접 입출력 장치에 접근을 하여 데이터를 주고 받는 폴링(Poling) 방식이었으나 모든 입출력에 관여하므로 장치가 증가할 경우 효율이 떨어진다.
현재 입출력 장치가 다양해지면서 CPU는 입출력에 대한 명령을 입출력 관리자에게 보내고 관리자가 직접 데이터를 메모리에 적재시키거나 데이터를 저장장치로 옮긴다. 이때, 전송이 끝나면 완료 신호를 CPU에게 보내는 방식을 사용한다.즉, 입출력 관리자가 CPU에 보내는 데이터 전송 완료 신호를 인터럽트라고 하는 것이다.
입출력 관리자는 여기서 DMA(Direct Memory Access)라는 직접 메모리 접근 권한을 얻게되는데, 빠른 입출력 장치를 사용함으로써 인터럽트가 빈번해질 때 CPU가 그 작업을 매 번 처리해주는 것에 대한 부담을 줄여준다. 데이터를 메모리에 block 단위로 직접 전송하여 적재하는 과정까지 끝난 후 인터럽트를 걸어 한 번에 알려준다.
CPU는 입출력 관리자에게 명령만 내리고 기존 작업을 하다가 인터럽트를 받게되면 하던 작업을 중단하고 이 시점의 레지스터와 프로그램 카운터(Program Counter)를 저장한 후 CPU의 제어를 인터럽트 핸들러에 넘겨 데이터를 처리한다. 프로그램 카운터는 다음에 실행할 명령어의 위치를 말한다. 이렇듯, CPU가 하던 작업을 도중에 그만두고 처리를 해야하는 신호라는 맥락에서 인터럽트라고 하는 것이다.
인터럽트는 하드웨어가 발생시키는 인터럽트와 소프트웨어 측면에서 트랩(Trap)이라는 개념으로 프로그램이 오류를 범한 경우(Exception), 프로그램이 커널 함수를 호출하는 경우(System Call)의 인터럽트로 나뉜다. 인터럽트 벡터란 해당 인터럽트들의 핸들러 주소를 갖고 있고, 인터럽트 핸들러는 해당 인터럽트를 처리하는 커널 함수를 말한다.
시스템 콜 이란 커널이 자신을 보호하기 위해 만든 인터페이스로써, 사용자나 응용 프로그램이 자원에 직접적으로 접근하는 걸 차단하는 게 목적이다. 해당 인터페이스를 사용해 인터럽트를 걸어서 커널 함수를 호출하는 것을 의미한다. 작업을 요청하기만 하고, 결과만 사용자에게 전달해주기에 과정이 간단하다.
운영체제의 분류
운영체제는 아래와 같이 조건에 따라 분류된다.
동시 작업 가능 여부
- 단일 작업: 한 번에 하나의 작업만 처리가능한 시스템으로 MS-DOS가 있다.
- 다중 작업: 동시에 두 개 이상의 작업 처리가 가능한 멀티태스킹 방식의 시스템이며, UNIX, MS Windows가 이에 해당되고, 시분할 시스템과도 같다.
사용자의 수
- 단일 사용자 : MS Windows, MS-DOS
- 다중 사용자 : UNIX
처리 방식
- 일괄 처리 시스템 : 작업 요청의 일정량 모아서 한꺼번에 처리하고, 종료될 때까지 대기해야 한다.
- 시분할 시스템 : 여러 작업을 수행했을 때 CPU를 일정 시간 단위로 분할해서 나누어 사용한다. 짧은 응답 시간을 가져효율성이 좋으며, 현대에 대부분 일반적인 사용자들이 쓰는 운영체제 시스템이라고 볼 수 있다.
- 실시간 시스템 : 정해진 시간 안에 어떠한 작업이 반드시 종료됨이 보장되어야 하는 실시간을 위한 운영체제로써, 미사일 제어, 반도체 장비를 활용할 때 이 시스템이 적용된다.
프로세스 상태운영체제가 일괄 작업 시스템이라면 프로세스는 생성, 실행, 완료 상태의 과정만을 거치지만, 대부분 사용자들이 사용하는 시분할 시스템은 추가적으로 프로세스별 타임 슬라이스를 갖고있어 준비 상태와 운영체제의 효율성을 고려한 대기 상태가 존재한다.
- 생성 : 프로그램이 메모리에 올라와 프로세스가 되어 준비를 완료한 상태. 자세하게는 프로세스 제어 블록이 생성되는 것. (PCB)
- 준비 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태로 CPU 준비 큐에서 대기하게 된다.
- 실행 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업의 기계어를 수행하는 상태. 타임 슬라이스에 정해진 시간 동안 CPU를 사용할 권리를 가진다.
- 대기 : 실행 도중 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태.
- 완료 : 실행 상태의 프로세스가 모든 작업을 마친 상태로 프로세스 제어 블록이 사라진다.
이외에도 프로세스가 실행 중에 작업을 일시적으로 쉬는 상태를 나타내는 휴식 상태와 메모리에서 잠시 쫓겨나 스왑영역에 보관되는 보류 상태가 있다.
컴퓨터 시스템 구조
컴퓨터 내부에는 CPU와 메모리(RAM)가 있으며 외부 입출력 장치를 통해 요청을 하면 입력으로 들어와 작업을 처리하게 된다.각 입출력 장치마다 CPU의 부분적인 역할을 하는 장치 컨트롤러와 입출력 시 데이터를 담기 위한 로컬 버퍼가 붙어있고, 그 외에도 메모리에 접근하는 데에 필요한 메모리 컨트롤러와 DMA 제어기가 있다.
또한, CPU에서 기계어를 실행할 때 운영체제가 실행하는 명령인지 사용자 프로그램이 실행하는 명령인지 구분하기 위한 Mode bit이 붙어있으며 외부 입출력 장치로부터 인터럽트를 받기 위한 Interrupt line과 CPU에서의 연산 결과 및 메모리 주소나 데이터를 임시적으로 저장하는 공간인 레지스터들이 있다. 참고로 CPU는 프로그램 카운터라는 레지스터를 사용해 다음에 실행할 명령어의 위치를 보고 순서에 따라 기계어가 실행된다.아래는 컴퓨터의 내부, 외부 구조를 도식화하여 나타낸 것이다.
Mode bit : 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치로써, 두 가지 모드의 조작을 지원한다.
- 사용자 모드(1) : 사용자 프로그램 수행 시(제한된 기계어만 실행, 인터럽트 또는 예외 발생 시 자동으로 0으로 바뀜)
- 모니터 모드(0, = 커널 모드) : OS 명령 수행 시(보안성을 띠는 명령어의 경우 모니터 모드에서만 수행 가능)
Timer : 사용자 프로세스에 정해진 실행 시간이 지난 후 운영체제에게 제어권이 넘어가도록 타이머 인터럽트를 발생시키는 하드웨어로, CPU를 특정 프로세스가 독차지하는 것으로부터 보호해준다.추가적으로 메모리 공간에 대한 설명을 덧붙이자면, CPU가 작업하는 공간과 DMA 제어기가 입출력 데이터를 옮기는 공간으로 분리되어 메인 메모리가 운영된다. 메모리의 주소 공간 중 일부를 DMA 제어기에 주어 작업 공간이 겹치는 현상을 막아주는데 이를 메모리 맵 입출력(Memory Mapped I/O)이라고 한다.
저장장치 계층구조 :메모리 계층은 CPU가 메모리에 빠르게 접근하기 위해 나눈 구조이다.
레지스터 <- 캐시 메모리 <- 메인 메모리 <- 하드 디스크(or SSD) <- 광 디스크 <- 마그네틱 테이프
왼쪽으로 갈수록 값이 비싸지만 속도가 빠르고 재부팅시 데이터가 사라지는 휘발성의 성격을 띠고있다. 반면 반대로 갈수록 값은 싸며 속도가 느리고 이전의 작업이나 데이터를 기억하는 비휘발성이다.
캐시 메모리는 속도가 빠른 CPU와 느린 메모리의 속도 차이를 완화하기 위해 CPU에서 내부적으로 빠른 접근이 가능한 메모리를 두는데 이를 캐시 메모리라 하며, 이를 통해 CPU가 빠르게 접근하는 것을 캐싱(Caching)이라 한다. 재사용성이 높은 페이지를 캐시 메모리에 가져오는 게 효율이 좋다.하드디스크는 CPU가 직접적으로 접근을 하지 못하기에 하드 디스크의 데이터를 메모리로 이동시키고, 메모리에서 접근을 하므로 속도가 느리다.
동기식 입출력과 비동기식 입출력동기식 입출력 : 입출력 요청 후 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어가는 방식
구현 방식
- 입출력이 끝날 때까지 대기해야하므로 CPU를 낭비시키면서 매 시점 하나의 입출력만 일어난다.
- 입출력이 완료될 때까지 해당 프로그램에게서 CPU를 뺏고, 다른 프로그램에게 CPU를 할당한다. 처음보다 효율적인 방식이라고 볼 수 있다.
비동기식 입출력 : 입출력이 시작된 후 작업이 끝나기를 기다리지 않고, 제어가 사용자 프로그램에 즉시 넘어가는 방식
두 공통점은 입출력 완료시 인터럽트로 CPU에게 신호를 보낸다는 것이다.
728x90'Computer Science > Operating System' 카테고리의 다른 글
6. 메모리 주소와 바인딩 (0) 2022.03.29 5. 교착상태(Deadlock) (0) 2022.03.21 4. 프로세스 병행 제어와 동기화 (0) 2022.03.13 3. CPU 스케줄링 (0) 2022.03.07 2. 프로세스 관리 (0) 2022.02.28