1. 정의

메모리에 올라가 실행중인 프로그램으로 응용프로그램은 프로세스가 아님

응용프로그램이 파일 형태로 저장된 경우 : 코드 이미지 또는 바이너리

 

 

2. 프로세스와 운영체제

운영체제는 응용프로그램을 실행시켜 프로세스를 생성하고 프로세스의 실행, 중단, 종료를 관리

 

3. 프로세스 스케줄링

프로세스 실행과 관련된 운영체제의 기능
어느 시점에 어떤 프로세스를 실행시킬건지에 관련된 규칙들

하나의 프로세스가 실행되는 동안 다른 프로세스는 실행 불가
실행중인 프로세스가 끝날때까지 기다렸다가 다음 프로세스를 실행시켜야 하는 문제가 발생
➲ 스케줄링 등장


1) 배치처리 시스템

자료구조 중 큐(FIFO)를 사용하는 스케쥴링

  • 실행되어야 할 프로세스들을 미리 등록시킴
  • 프로세스의 실행이 종료되면 자동으로 다른 프로세스가 실행됨
  • 사용자가 첫번째 프로세스가 끝났는지 확인할 필요없이 os가 알아서 순차적으로 프로그램을 실행시킴
문제 : 한번에 하나의 프로그램만 실행 가능 & 어떤 프로그램의 실행시간이 길면 다른 프로그램 실행까지의 시간이 오래 걸림

 

 

2) 시분할 시스템

한대의 컴퓨터 계정을 나눠 계정별로 여러 사용자가 사용하는 경우 각 계정별로 쉘이 실행됨
해당 컴퓨터가 배치처리 시스템 스케쥴링을 사용하면 A계정에서 쉘프로그램이 종료되어야만 B계정의 쉘프로그램이 실행
동시 사용이 불가하고 요청을 해도 다른 계정에서 사용중인 경우 응답시간이 지연됨 
➲ 시분할 시스템의 등장
  • 다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화하는 시스템
  • 시간을 세밀하게 분할하여 하나의 응용 프로그램이 cpu를 점유하는 시간을 잘게 쪼개어 실행될 수 있게 하는 시스템(1/10초)
  • 프로세스 A, B, C가 존재하는 경우 : 프로세스A를 1/10초 실행, 프로세스 B를 1/10초 실행, 프로세스 C를 1/10초 실행후, 다시 프로세스A가 1/10초 실행 => 최소 3/10초 안에 진행됨

 

3) 멀티태스킹 시스템

  • 멀티태스킹 시스템의 구현은 시분할 시스템과 동일(목적이 다름)
  • 단일 CPU에서 여러 응용 프로그램이 동시에 실행되는 것 처럼 보이도록 하는 시스템(단일 CPU에서는 하나의 프로그램만 실행이 가능)
  • 시분할 시스템보다 더 짧은 단위로 실행 응용 프로그램이 바뀜 : 사람이 눈으로는 두 프로세스가 동시에 실행되는 것 처럼 보임


4. 멀티프로그래밍

  • 구현은 시분할시스템, 멀티태스킹과 유사한면이 있으나 목적이 다름
  • CPU를 최대한 많이 사용하고자 하는 시스템
메모리가 계층구조를 가짐에 따라 CPU가 메모리에 접근하는 속도가 달라짐
저장매체(메모리)에 데이터가 저장된 경우,
- case1) 레지스터에 데이터가 있는 경우 CPU가 한 사이클 만에 데이터를 가져와 실행할 수 있음
- case2) HDD에 데이터가 있는 경우 CPU가 데이터를 가져오는 시간이 길어지고, 데이터를 가져오는 동안 다른 작업 없이 대기
  • CPU를 현재 사용할 수 없는 프로그램을 CPU를 바로 사용할 수 있는 프로그램으로 교체해 CPU를 최대한으로 사용
    ex. 파일 열기를 요청한 경우, 열리는 동안 CPU를 사용하지 않기 때문에 그 동안 다른프로그램을 실행시켜 프로세스로 만들어줌

 

프로그램을 만들 때 성능을 개선하기 위해서는 메모리(코드가 아니라 데이터나 파일을 메모리에서 실행)에서 실행시킬 수 있는 프로그램을 개발
➲ CPU가 접근하는 시간이 짧아지고 성능이 향상됨

 


4. 프로세스 알고리즘

  1. FIFO 스케줄러: 큐에 실행시킬 프로그램을 등록 - 큐에서 등록된 순서대로 프로세스를 실행시키는 알고리즘
  2. SJF 스케줄러 : 우선순위 큐, 최소힙을 사용, 프로세스 실행시간이 가장 짧은 프로세스를 먼저 실행시키는 알고리즘
  3. 우선순위 기반 스케줄러
    • 정적 우선 순위 : 프로세스마다 우선순위를 미리 정함
    • 동적 우선 순위 : 스케줄러가 상황에 따라 동적으로 우선순위를 정함
  4. Roun Robin 스케줄링 알고리즘 : 큐에 실행시킬 프로그램을 순서대로 배치하여 실행 - 일정 시간 동안 프로세스가 완료되지 않으면 종료시킨 후, 큐에 종료된 프로세스를 다시 넣고 다른 프로세스를 실행하는 방식을 반복

 

5. 프로세스 상태정보

  • new(생성) : 프로세스를 생성하는 중인 상태
  • ready(실행가능) : 실행준비 완료
  • running(실행) : CPU에서 실행상태
  • blocked(대기) : 실행이 불가한 상태
  • exit(종료) : 프로세스를 완전히 종료하기 위한 상태

'Dev-log > 운영체제' 카테고리의 다른 글

운영체제  (0) 2024.08.08
핵심적인 기능을 하는 커널과 부가적인 기능을 하는 여러 프로그램이 합쳐져 있는 시스템 소프트웨어


1. 정의

  • 시스템 자원(하드웨어)들을 효율적으로 관리
  • 사용자와 하드웨어 사이의 인터페이스를 제공
  • 응용프로그램(운영체제위에서 돌아가는 프로그램)이 원활하게 동작하도록 지원하는 시스템 소프트웨어



2. 목적(시스템 자원을 관리하고, 응용프로그램을 관리하는 이유)

사용자가 사용하는 응용프로그램이 적절하게 동작하도록 지원
=> 응용프로그램이 CPU를 독점하거나 반복실행하게 만들 수 있음 => 사용자가 원하는 응용프로그램이 적절하게 동작할 수 없음 



3. OS의 역할

Q. 응용프로그램이 하드웨어에 직접 접근하지 않는다면 어떻게 하드웨어 자원을 사용할 수 있을까?
A. 운영체제가 필요한 자원을 응용프로그램에게 할당
  • 프로세스 관리  : 프로세스 생성과 종료
  • 자원 접근과 할당
    1. CPU : CPU는 한번에 하나의 프로세스를 실행 -> 다른 프로세스가 CPU를 사용하기 위해 기다려야 하는데 이때 운영체제에서 스케줄링을 처리
    2. 메모리 : 프로세스의 크기 등을 고려하여 메모리의 어떤 주소에 적재할지 결정
    3. 입출력장치 : CPU에 인터럽트 요청 신호를 보내면 CPU는 커널 영역에 있는 인터럽트 서비스 루틴을 실행
  • 파일시스템 관리


4. shell(쉘)

  • 사용자가 하드웨어를 조작할 수 있도록 인터페이스를 제공하는 프로그램
  • CLI와 GUI 환경으로 분류
  • 명력을 해석, 명령을 실행(커널에 명령을 전달하기 위해서는 커널이 이해할 수 있는 언어로 전달해야함)



5. kernel(커널)

  • 하드웨어를 관리하는 OS의 핵심(핵심 서비스를 담당)으로 OS의 가장 아래 계층에서 돌아감
  • 커널 위에 여러 소프트웨어 계층을 올린 것
  • 하드웨어 자원을 필요한 프로세스에 나눠줌 : 프로세스 제어, 메모리 제어, 프로그램이 운영 체제에 요구하는 시스템 콜 등을 수행
  • 사용자가 실행하는 응용프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호
    (응용프로그램이 자원에 직접 접근하여 조작하면 자원이 무분별하게 관리되고 하드웨어 전체에 악영향을 끼칠 수 있음)
사용자 인터페이스 미지원 : 사용자와 컴퓨터의 상호작용은 지원하지 않음 (운영체제는 인터페이스를 제공, 커널에는 포함되지 않음)



6. 이중 모드(사용자 모드 - 커널 모드)

CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식
CPU에 명령어와 CPU Protection Ring의 level 정보가 같이 전달되고, level 정보에 따라서 실행 여부가 결정됨

 

  1. 사용자 모드 (level 3)
    • 운영체제의 서비스를 제공받을 수 없는 실행 모드
    •  커널 영역의 코드를 실행할 수 없는 모드
  2. 커널 모드 (level 0)
    • 운영체제 서비스를 제공 받을 수 있는 실행 모드
    • 커널 영역의 코드를 실행할 수 있는 모드
    • CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 포함한 모든 명령어를 실행할 수 있음



7. 시스템 콜

  1. 정의
    • 쉘과 커널이 커뮤니케이션 하기 위한 인터페이스
    • 사용자모드에서 커널모드로 전환하기 위한 요청으로 소프트웨어 인터럽트(인터럽트를 발생시키는 특정 명령어에 의해 발생)
  2. 동작과정
    • 사용자가 쉘을 사용해 명령을 하면 쉘은 커널에 요청을 하고 요청 결과를 쉘프로그램으로 전달, 쉘은 사용자가 요청 결과를 볼 수 있게 화면에 처리
    • 응용프로그램 실행 과정에서 운영체제 서비스를 빈번하게 이용 → 시스템콜이 빈번하게 발생하고 사용자 모드와 커널 모드를 오가며 응용프로그램이 실행됨
  3. 특징
    •  운영체제별로 시스템콜을 호출할 수 있는 API 구현이 다름(시스템콜도 운영체제별로 다름)

 

8. 시스템 콜 발생 후

  1. CPU
    • 진행중이던 작업을 백업하고 커널 영역 내에 시스템 콜을 수행하는 코드를 실행
    • 운영체제 코드를 실행한 후 다시 기존에 진행하던 응용프로그램으로 복귀해 작업을 실행
  2. 운영체제
    • 응용프로그램 대신 자원에 접근하여 요청한 작업을 대신 수행(완료후 다시 사용자모드)

 

 

Reference

https://hongong.hanbit.co.kr/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%9E%80-%EC%BB%A4%EB%84%90%EC%9D%98-%EA%B0%9C%EB%85%90-%EC%9D%91%EC%9A%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%A4%ED%96%89%EC%9D%84-%EC%9C%84%ED%95%9C/
https://namu.wiki/w/%EC%BB%A4%EB%84%90(%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C)

'Dev-log > 운영체제' 카테고리의 다른 글

프로세스 & 프로세스 스케줄링  (0) 2024.08.11

+ Recent posts