운영체제 정리( 운영체제와 컴퓨터, CPU 스케줄링)

Park Jae Hong·2022년 11월 27일
1

3. 운영체제

운영체제(Operating System) 은 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스

펌웨어는 OS와 유사하지만, 소프트웨어를 추가로 설치할 수 없는 것.

3.1 운영체제와 컴퓨터

운영체제의 역할과 구조

  • 운영체제의 역할
    • CPU 스케줄링과 프로세스 관리
      • CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원할당 및 반환을 관리
    • 메모리 관리
      • 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리
    • 디스크 파일관리
      • 디스크 파일을 어떠한 방법으로 보관할지 관리
    • I/O 디바이스 관리
      • 키보드, 마우스와 컴퓨터 간의 데이터를 주고 받는 것을 관리함.

운영체제의 구조

GUI 대신 CUI만 있는 리눅스 서버도 존재한다.

ec2서버나 GCP 인스턴스 생각해보자!

시스템콜

운영체제가 커널에 접근하기 위한 인터페이스

유저모드에서 커널모드로 뭔가의 작업을 수행하려면 이 시스템콜을 호출해야 한다.

public class Demo {
    public static void main(String[] args) throws IOException {
        // 로직 수행중...
        FileReader fr = new FileReader("hello.txt");
        fr.read();
    }
}

로직을 수행중에 위에 구현한 FileReader.read() 를 사용하는 순간에

유저모드에서 파일을 읽어와야 하는 IO 작업이 수행되기 때문에 유저모드에선 할 수 없어서

바로 시스템콜을 호출한다. 그 후 커널모드로 진입하여 실행된 후에 다시 유저모드로 전환해서 남은 로직을 수행한다.

이런식으로 구성되면, 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고, 프로그램을 다른 프로그램으로부터 보호할 수 있다.

시스템콜은 하나의 추상화 계층이기에, 이를 통해 네트웍 통신이나 DB 와 같은 낮은 단계의 영역 처리 부분에서 신경을 쓰지 않고 프로그램을 구현할 수 있다는 장점이 존재한다.

모드비트

이 모드비트를 참고해서 시스템콜이 작동될 때 유저모드와 커널모드를 구분한다.

모드 비트 → 플래그

0은 커널모드, 1은 유저모드

입출력 디바이스는 운영체제를 통해서만 작동해야 한다.

유저모드로 여러 프로그램을 막 켤 수 있다면, 공격자가 바로 켤수 있다는 뜻이다.

운영체제를 통해 프로그램을 작동하게 하자!

3.1.2 컴퓨터의 요소

  • CPU
    • 산술논리연산장치 (ALU), 제어장치, 레지스터로 구성된 컴퓨터 장치
    • 인터럽트에 의해 메모리에 존재하는 명령어를 해석해서 실행
    • 제어장치
      • 프로세스 조작을 지시하는 CPU의 하나
      • 입출력 장치 간 통신을 제어하고 데이터 처리를 위한 순서 결정
    • 레지스터
      • CPU 안에 있는 매우 빠른 임시기억장치
      • 연산속도가 메모리보다 수십~수백 배 빠름
      • CPU 자체적으로 데이터를 저장할 방법이 없어 이 부품을 거쳐 데이터를 전달
    • 산술논리 연산장치
      • ALU는 덧셈, 뺄셈 같은 두 숫자의 산술 연산, 배타적 논리합, 논리곱 같은 논리 연산을 계산하는 디지털 회로

인터럽트

CPU는 하나의 작업만 수행할 수 있는데,

하나의 작업을 진행하다가 이 신호가 들어오면 현재 작업중이던 것을 저장해두고, 신호가 들어온 작업을 처리한다.

인터럽트 간에는 우선순위가 존재하고, 그에 따라 실행되며

하드웨어 인터럽트와 소프트웨어 인터럽트가 있다.

  • 하드웨어 인터럽트
    • IO 디바이스에서 발생하는 인터럽트
  • 소프트웨어 인터럽트
    • 트랩이라고도 함.
    • 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발동

DMA 컨트롤러

IO 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치

CPU가 이 입출력에 해당하는 작업도 수행하게 되면 너무 많은 인터럽트 요청이 들어오기에 CPU 부하를 막아주고, 그 일을 부담하는 보조적인 장치이다.

하나의 작업을 CPU와 동시에 하는 것을 방지

메모리

데이터나 상태, 명령어를 기록하는 장치

RAM을 일컬어 메모리라고도 한다. CPU는 계산을 담당하고, 메모리는 기억을 담당

메모리가 크면 동시에 많은 일을 수행할 수 있다.

디바이스 컨트롤러

디바이스 컨트롤러는 컴퓨터와 연결된 IO 디바이스들의 작은 CPU를 말함

CPU 스케줄링 알고리즘

CPU 스케줄링

매 시점 어떤 프로세스에 CPU를 할당해 작업을 처리할 것인지 결정한다.
가장 효율적으로, 특정 프로세스가 불이익을 당하지 않도록

❓단기 스케줄러 == CPU 스케줄러 : 준비 상태의 프로세스 중 어떤 프로세스를 다음에 실행 상태로 만들 것인지 결정하는 역할

  • 빈번하게 호출되기 때문에 수행 속도가 빨라야 한다

❓장기 스케줄러 == 작업 스케줄러 : 어떤 프로세스를 준비 큐에 진입시킬지 결정하는 역할

  • 호출이 빈번하지 않기 때문에 상대적으로 속도가 느린 것이 허용
  • 메모리에 동시에 올라가 있는 프로세스의 수를 조절
  • 시작 상태의 프로세스에게 메모리를 할당할 것인지 승인 여부
  • 과거에 자원이 빈약하던 시절에 주로 사용 : 적은 양의 메모리를 효율적으로 할당하기 위해 조절 역할 담당

CPU 스케줄링 알고리즘

CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다.

❓목표

  • CPU 이용률을 높게 한다
  • 주어진 시간에 많은 일을 하게 한다
  • 준비 큐(ready queue)에 있는 프로세스는 적게 한다
  • 응답 시간은 짧게 한다

비선점형 방식

프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않는다.
-> 컨텍스트 스위칭으로 인한 부하가 적음

FCFS(First Come, First served)

가장 먼저 온 것을 가장 먼저 처리하는 알고리즘

처리 시간이 긴 프로세스가 먼저 도착한 경우, 뒤에 도착한 처리 시간이 짧은 프로세스들의 대기시간이 길어진다.

SJF(Shortest Job First)

실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘

처리 시간이 긴 프로세스가 실행되지 않는 현상이 발생
평균 대기 시간이 가장 짧지만 실제 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 토대로 추측하여 사용한다.

우선순위

SJF에서 긴 시간을 가진 프로세스가 실행되지 않는 현상을 보완하기 위해 오래된 작업에게 높은 우선순위를 부여하는 알고리즘

대기 중인 프로세스들에 우선순위를 부여하고 우선순위가 높은 프로세스에 CPU를 우선할당한다.

선점형 방식

현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에게 CPU 소유권을 할당하는 방식

라운드 로빈(RR, Round Robin)

현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘

  • 할당 시간이 너무 크면 FCFS가 됨
  • 할당 시간이 너무 짧으면 컨텍스트 스위칭이 잦아져서 오버헤드 발생
  • 일반적으로 전체 작업시간은 길어지지만 평균 응답 시간은 짧아진다는 특징이 있다
  • 로드밸런서에서 트래픽 분산 알고리즘으로 사용

SRF

기존 작업을 처리하는 도중 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘

  • SJF는 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 작업을 모두 수행하고 작업을 이어나감

다단계 큐

우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용

  • 큐 간의 프로세스 이동이 안 되므로 스케줄링 부담은 적지만 유연성이 떨어짐
profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글