[OS] Day 1

OS란? 

Application과 H/W의 interface 역할을 하는 Software로 CPU, Memory, I/O 장치 등 리소스를 관리한다.

운영체제의 역할

  • 자원 관리: 자원들을 효율적으로 관리하여 응용 프로그램이 자원을 공유하고 사용할 수 있도록 한다.
  • 추상화: 하드웨어와 응용 프로그램 사이의 복잡한 상호작용을 추상화하여 응용 프로그램이 하드웨어의 세부 사항을 몰라도 사용할 수 있도록 해준다. 
  • 프로세스 관리: 프로세스(실행 중인 프로그램)의 생성, 실행, 일시 중지, 종료 등을 관리하여 프로그램들이 동시에 실행될 수 있도록 합니다. 
  • 메모리 관리: 메모리를 효율적으로 할당하여 여러 프로그램이 메모리를 공유하고 충돌하지 않도록 관리한다.
  • 파일 시스템 관리: 파일과 디렉터리를 생성, 읽기, 쓰기, 삭제 등을 관리하여 데이터를 구조화하고 보호한다. 
  • 입출력 관리: 출력 장치와의 상호작용을 관리하여 응용 프로그램이 입출력을 간편하게 처리할 수 있도록 한다. 
  • 사용자 인터페이스 제공: 사용자와 컴퓨터 사이의 상호작용을 담당하는 사용자 인터페이스를 제공한다. 
  • 보안과 안정성: 시스템의 보안을 유지하고 오류나 충돌을 최소화하여 시스템의 안정성을 보장한다.

OS 실행

OS는 PC의 전원이 켜졌을 때 ROM에 저장되어있는 Bootstrap 프로그램을 통해  OS 정보가 저장된(ROM) 정보를 RAM에 로딩된다. 이후 OS를 통해 애플리케이션들을 실행할 수 있다. (ROM은 Read-Only Memory로 비휘발성 메모리이다.)

 

Kernel이란?

User가 애플리케이션을 통해 직접 H/W 조작한다면 pc가 망가지거나 문제가 생길 수 있고, 보안상으로도 문제가 생길 수 있기 때문에 OS는 kernel 모드와 user모드를 구분해서 동작한다.

 

커널 모드에서는 하드웨어 접근, 메모리관리, 스케줄링, 시스템 콜 처리, 보안 및 리소스 제어, 예외 처리 등을 한다.

 

System call이란?

Application과 OS간의 Interface로 process가 OS에게 어떤 요청을 하면 OS가 kernel 모드에서 요청을 처리한 후 돌아온다.

예를 들어 process에서 printf()라는 명령을 호출하면 System call을 통해 OS에게 화면에 출력해달라는 요청을 보내고, OS는 해당 요청을 Kernel에서 처리 후 User mode로 다시 돌아온다. 

System call도 직접 호출할 수 있는데, 직접 구현하면 힘들고 위험하기 때문에 fork(), wait()와 같은 이미 만들어진 라이브러리 함수를 사용하여 호출할 수 있다.

 

폰 노이만 아키텍처

현대의 OS들은 폰 노이만 아키텍처를 따르며, 폰노이만 아키텍처는 아래 순서로 프로그램을 실행한다.

명령어 집합 정의 -> 명령어들로 구성된 프로그램을 메모리에 로딩(fetch) -> CPU가 메모리에서 데이터를 가져와서 명령을 수행한다(execute).

 

Interrupt란?

cpu가 프로세스의 작업을 처리하는 도중 I/O 요청이 들어오면 cpu가 잠시 멈추고 I/O 요청을 먼저 처리한 후 다시 cpu 작업을 재개한다.

Interrupt가 있기 때문에 작업을 진행하면서 키보드로 타자를 칠수도 있는 것이다.

위 사진을 보면 I/O를 발생 시키는 Device가 DMA(Diret Memory Access)를 통해  memory에 직접 접근하는 것을 볼 수 있다. 

키보드에서 타자를 쳤을 때 어떤 키를 눌렀는지에 대한 데이터를 굳이 cpu를 통해 memory로 넘길 필요가 없기 때문에 Device에서 바로 Memory로 접근이 가능하다.

 

 

Computer System Architecture

  • Symmetric Multiprocessing(SMP): 각 processor가 모든 process에 대한 작업을 진행한다.
  • Asymmetric Multiprocessing: 각 processor가 1개의 program을 담당한다.

  • Multicore Design: Multi Processor가 여러 개의 cpu라면, Multi Core는 하나의 CPU에 연산을 하는 core를 여러 개 두는 방식

 

OS operation

  • Multi Programming: OS 위에 한번에 여러 개의 프로그램을 올리는 것을 말한다. (예전에는 하나의 프로그램만 실행 가능했다.)

  • Multi Tasking(=Multi Processing): 빠르게 작업을 바꿔가며 여러 개의 프로세스를 동시에 컨트롤하는 것 (Time sharing)
  • Scheduling: 멀티테스킹에서 작업을 빠르게 바꿀 때 어떤 작업으로 바꿀지 정하는 과정을 스케줄링이라고 한다.

 

프로세스와 스레드

프로세스: OS에게 CPU, Memory, FileSystem, I/O device 등의 리소스를 할당받아 실행 중인 프로그램으로 폰 노이만 아키텍처로 실행된다.

스레드: 프로세스에게 자원을 할당받아 처리하는 작업 단위

 

예시

카카오톡이 실행되면 프로세스이고, 카카오톡에서 채팅을 수행하는 스레드, 알림을 수행하는 스레드가 있다.

 

프로세스와 스레드의 자원

프로세스가 OS에게 할당 받은 메모리 영역은 Code, Data, Stack, Heap이 있다.

스레드는 이중에서 stack 영역만 독립적으로 가지고 나머지 메모리 영역은 각 스레드끼리 공유하는 공유 자원이다.

 

 

정적 메모리

Code와 Data는 정적 메모리로 Code는 소스 코드, Data는 전역변수, static 변수, 배열, 구조체 등이 있다.

 

동적 메모리

Stack과 Heap은 동적 메모리로 한쪽이 커지면 다른 한쪽은 줄어드는 특징이 있다.

Stack은 컴파일 단계에서 크기가 정해지고, 함수의 복귀 지점, 지역 변수, 매개 변수 등이 있다.

Heap은 new, malloc을 사용한 객체 생성에 사용된다.

 

 

Virtualization (가상화)

가상화란 여러 개의 OS를 사용하는 기술로, PC의 리소스를 각 OS에 분할 할당한다.

여러 개의 OS를 H/W 위에 바로 올리는 것이 아닌 VMM 위에 올린다.

대표적인 VMM으로 Hypervisor가 있는데 종종 PC 포맷할 때 GUI 화면을 볼 수 있다.

 

Computing Environment

client-server: 각 클라이언트 사이에 서버를 두고 서버를 통해서 데이터를 주고 받는 방법

peer to peer: 흔히 P2P라고 불리며, 서버 없이 각 클라이언트에서 파일의 조각들을 가지고 그 조각들 보내서 받는 클라이언트에서 받은 파일 조각을 합치는 방법

예를 들어 5분짜리 유튜브 영상을 0~1분 , 1~2분, 2~3분, 3~4분, 4~5분의 데이터를 가진 클라이언트들이 각각의 데이터를 A 클라이언트에게 보내면 A클라이언트는 받은 파일을 합쳐서 5분짜리 유튜브 영상을 받아볼 수 있다.

 

Cloud: AWS, Azure, GCP 등 내 컴퓨터가 아닌 다른 컴퓨터를 빌려 사용하는 방법

'개념 정리 > OS' 카테고리의 다른 글

[OS]Day6  (0) 2023.08.16
[OS]Day5  (0) 2023.08.14
[OS]Day4  (0) 2023.08.10
[OS] Day3  (0) 2023.08.09
[OS] Day2  (0) 2023.08.08