본문 바로가기
시스템/시스템보안

(1-1) OS

by 주황딱지 2024. 6. 24.

 

OS(운영체제)

 

OS란 컴퓨터 유저와 컴퓨터 하드웨어 사이에서 즉각적으로 움직이는 프로그램이다.

OS의 목표:

  • 유저 프로그램들을 실행시키고 유저들의 문제들을 해결하는 것을 쉽게 해 준다.
  • 컴퓨터 시스템을 쓰기 쉽게 만든다.
  • 효율적인 공간에서 컴퓨터 하드웨어가 사용되게 한다. 

 

os 구조


Computer System Structure(컴퓨터 시스템 구조)

 

컴퓨터 시스템은 4개의 부품들로 나뉠 수 있다.

  • 하드웨어: 기본 컴퓨팅 리소스 제공(CPU, 메모리, 입출력 장치 등)
  • OS: 다양한 앱들과 유저들을 통해 하드웨어의 사용을 조종하거나 협력한다.
  • 앱: 유저들의 컴퓨팅 문제들을 해결하는데 쓰이는 시스템 리소스들을 정의한다.
  • 유저: 사람들, 기계, 아님 다른 컴퓨터들

Computer-System Operation(컴퓨터-시스템 작동)

  • 공유된 메모리에 접근할 수 있게 제공하는 일반적인 bus를 통해 하나 이상의 CPU들과 기기 제어기들과 연결시킨다. 
  • 메모리 주기들을 위해 경쟁하는 CPU들과 기기들을 동시에 작동시킨다.
  • *bus = 하드웨어들이 데이터들을 주고받기 위한 통로

컴퓨터-시스템 실행

- 입출력 장치들과 CPU는 동시에 작동할 수 있다.

- 각각의 조종장치는 각각의  기기 타입의 대표이다.

- 각각의 조종장치는 로컬 버퍼를 갖고 있다. //로컬버퍼 = 데이터를 임시 저장해 주는 메모리

- 각각의 조종장치 타입은 운영체제 device driver를 관리하기 위해 갖고 있다.

  *device driver = 구조체에 정의되어 있는 함수를 통해 장치파일에 접근할 때 호출할 함수를 정의하고 구현해 주는 것

- CPU는 메모리에서 로컬 버퍼로/ 로컬 버퍼에서 메모리로 (양쪽 다 가능)  데이터를 옮긴다.

- 입출력 장치(I/O)는 장치에서 로컬 버퍼까지의 조종기이다.

- 조종장치들은  interrupt를 발생시켜서 작동을 끝내는 CPU가 내장되어 있다.

  * interrupt = CPU의 정상적인 프로그램 실행을 방해했다는 의미(interrupt 되면 interrupt를 먼저 해결해야 함)


Common Functions of Interrupts (일반적인 interrupt들의 기능들)

 

  • interrupt는 일반적으로 모든 서비스 루틴들의 주소들이 포함된 interrupt vector을 통해, interrupt 서비스 루틴들의 제어를 연결시킨다.
  • * interrupt vector = 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간
  • interrupt 구조는 인터럽티드된 명령의 주소를 반드시 저장해야 한다.
  • trap이나 exception은 소프트웨어 기반 interrupt로 에러나 사용자의 요청에 의해 발생한다.
  • *trap 내부 인터럽트로 사용자가 의도적으로 발생시키는 것, kenel을 호출할 때 발생한다.
  • *exception  예외 즉, 특정한 이벤트가 발생할 경우, control을 OS Kernel로 변경/전송해 주는 역할을 한다.
  • OS는 interrupt driven이다.
  • * interrupt driven = 인터럽트 구동식, 한마디로 인터럽트가 작동한다.

 Interrupt-driven I/O CYCLE (입출력 장치들의 인터럽트)

 

이 방식은 CPU의 대기를 극복하기 위해 나온 방식이다(인터럽트 발생 시 CPU가 멈춘다.).

장치를 확인하기 위한 CPU의 반복 작업이 필요로 하지 않는다.

입출력 모듈은 준비가 되면 인터럽트를 보내도록 한다. CPU가 그걸 잡는다.

인터럽트를 발생시키는 주체는 입출력 모듈이고 처리하는 것은 CPU가 된다.

Interrupt handling: 시스템 스택에 context를 저장해 놓고 일이 끝나면 pop 시켜 다시 작업을 한다.

 

[CPU 관점]                                                                                    [I/O 관점]

1. 읽기 명령 보내기                                                                      1. 읽기 명령받기

2. 다른 일 처리하기                                                                      2. 데이터를 연관된 주변 장치에서 읽기

3. 각 명령어의 주기 끝에 인터럽트 확인하기                               3. 데이터가 준비되면 프로세서에서 인터럽트 신호 보내기

4. 인터럽트가 있으면 context를 저장하고 인터럽트 수행            4. 프로세서로부터 데이터 요청이 들어올 때까지 대기하기

Interrupt-driven I/O Cycle

<순서> 

(1) I/O에게 명령 보내기(CPU) >>>  ( CPU가 명령어 간의 인터럽트가 있는지 확인 )>>> (2)

      ㄴ> I/O에서 명령받기(I/0) >>>   입력 준비, 출력 완료 또는 오류 발생 인터럽트 신호 생성(I/O)>>> (2)

(2) 인터럽트를 받고 인터럽트 핸들러에 제어권 전달(CPU) >>> 인터럽트 핸들러가 데이터를 처리, 인터럽트에 반환>>>(3)

(3)  CPU가 중단된 작업의 처리를 재개 >>> (1)

              

CPU는 IRQ line 가지고 있는데, 하나의 명령어의 실행을 완료할 때마다 항상 이 라인을 검사한다. 컨트롤러가 이 라인에 신호를 보내면 CPU는 하던 일을 잠깐 멈추고(경우에 따라 인터럽트를 지연시키기도 한다.) 현재 작업 내용을 Context에 잠깐 저장한 상태로 Interrupt handling을 하게 된다. 처리가 끝나면 context를 다시 불러와 작업을 재개한다.


Multitasking (Timesharing) 

 

멀티태스킹은 Batch system의 논리적 확장이다.

*Batch system: 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식이다. 하나의 작업이 끝나기 전까지 다른 작업이 불가하다.

CPU가 자주 작업들을 전환해서 유저가 각각의 작업들을 작동 중에 접근이 가능해지는 interactive computing을 생성하게 된다.

  • 응답 시간은 1초 미만이어야 한다.
  • 각 유저는 (메모리에서 실행시키는 적어도 하나의 프로그램=) 프로세스를 가지고 있다.
  • 만약 여러 개의 작업들이 동시에 실행될 준비가 되면 CPU scheduling이 일어난다.
  • *CPU Scheduling: 알고리즘 CPU가 하나의 프로세스 작업이 끝나면 다음 프로세스 작업을 수행해야 한다. 이때 다음 프로세스가 어느 프로세스인지를 선택하는 알고리즘이다. 
  • 프로세스들이 메모리에 들어가지지 않는다면, swapping이 프로세스들을 작동시키기 위해 메모리에서 넣다 뺀다.
  • 가상 메모리는 메모리에 완전히 들어가 있지 않아도 프로세스들의 실행을 허가한다.

+ Multiprogramming과 Multitasking은 모두 파일 시스템이 필요하다. 이것은 주로 이차적 저장소에 있어서, 저장소 관리도 필수적이다. 시스템은 또한 resource의 부적절한 사용을 막아야 하며, 프로세스 동기화와 소통에 대한 메커니즘을 제공해야 한다. 만약 이것이 안되면, deadlock(forever wiating for one another)에 빠질 수 있다.

 

Memory Layout for Multiprogrammed System


Dual- mode Operation(이중 동작 모드)

 

Dual-mode operation은 OS 자신과 다른 시스템 구성원들이  보호할 수 있게 허용한다.

 * Dual-mode:User mode와 kernel mode

 

하드웨어에서 Mode bit을 제공한다.  

 *Mode bit: 컴퓨터 하드웨어에서 커널이나 유저를 사용하게 해 줌

  • 시스템이 유저 모드인지 커널 모드인지 구별해 주는 능력 제공   
  • 유저가 작동하면 모드 비트는 "유저" = 0   
  • 커널 코드가 실행되면 모드 비트는 "커널" = 1

 우리는 어떻게 유저가 "커널"로 모드 비트를 설정하지 못한다고 확신할 수 있나?

  •   시스템 콜이 커널로 모드를 만들고, 유저에게 콜 리셋으로 반환한다.

일부 명령은 privileged로 지정되면 커널 모드에서만 실행할 수 있다.

유저에서 커널모드로 변환

 

위의 그림처럼 만약 user application에서 OS의 service request(System call)가 들어오면, 시스템은 kernel모드로 전환되어 request를 실행한다. 즉 User가 direct 하게 OS codes를 건들 수 없게 하여, 시스템을 보호하는 것이다. 특히 Hardware의 경우 User가 잘못 건들면 안 되기 때문에, OS가 control을 가지고, kernel mode에서 직접적인 통제를 한다.


System Calls(시스템 콜)

 

시스템 콜

  • OS에 제공하는 서비스에 대한 프로그래밍 인터페이스
  • C나 C++로 작성됨
  • 주로 직접 시스템 호출을 사용하는 대신 고급 API (Application Programming Interface)를 통해 프로그램에서 액세스 한다.
  • 주로 3가지 API들이 있는데 Win32 API(windows), POSIX API(unix, linux, mac os x), Java API(JVM)가 있다.

API - System call - OS 관계도

 

실제로 API를 이루는 함수들은 System calls을 호출하여 application programmer에게 도움을 준다. system-interface는 API의 function-call을 가로채어 필수적인 system calls을 OS에게 호출한다. 이후 system call 상태를 반환한다.


 

반응형

'시스템 > 시스템보안' 카테고리의 다른 글

(1-3) OS  (0) 2024.07.06
(1-2) OS  (1) 2024.07.05
9-1. Reverse Engineering  (3) 2024.06.04
중간(7~8 선택과 집중)  (0) 2024.04.24
중간 access control  (0) 2024.04.20