Allocate continuous memory(연속 메모리 할당)

  • 부팅 직후에는 os만 적재되어 있으므로 나머지는 빈공간(big single hole)
  • 이를 여러 가지의 프로그램이 동시에 올라와 스케줄링에 의해 CPU나 I/O를 할당받아 여러 위치에 적재된다.(scattered holes)
  • 프로세스가 순서대로 쌓이더라도 작업이 끝나는 순서는 정해져 있지 않고 다시 들어오는 프로세스와도 메모리 공간 차지 사이즈가 달라 메모리 중간중간 빈공간이 생성될 것

scattered holes가 계속 발생하면 hole들이 불연속하게 흩어져 있게 되어 메모리 단편화 현상 발생

(메모리의 빈 공간) < (프로세스 크기) : "외부 단편화"

"외부 단편화를 없애기 위해 연속 메모리 할당 방식을 사용!"

 

최초 적합(First-fit)

메모리를 순차적으로 탐색해 제일 먼저 발견한 적절하게 들어갈 수 있는 곳을 찾아 적재

 

최적 적합(Best-fit)

메모리를 탐색하여 메모리 공간 중에서 제일 적절하게 들어갈 수 있는 곳을 찾아 적재

 

최악적합(Worst-fit)

메모리를 넣는데 크기와 제일 안 맞는 공간(프로세스보다 큰 메모리 공간 중)에 적재

 

  • 속도 : 최초 적합
  • 이용률 : 최적 적합

연속 메모리 할당의 방식을 사용하더라도 외부 단편화로 인한 메모리 낭비가 1/3정도 발생

 

Compaction

 

  • hole들을 한 곳으로 모으겠다는 방식
  • 메모리 계산에 대한 부담이 큼
  • 최적의 알고리즘은 존재하지 않음
  • 이것을 해결한 방법이 "Paging"

 

❗ paging은 다음 3 포스팅에서~ ❗

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 4(Segmentation)  (0) 2021.08.12
[개념] Memory Management 3(Paging)  (0) 2021.08.12
[개념] Memory Management 1  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12

목표

  • 프로그래밍을 할 때 쉽게 메모리를 사용할 수 있도록 abstraction을 제공해주는 것
  • minimal overhead로 성능을 최대한 이끌어낼 수 있도록 프로세스들 사이에서 부족한 메모리 자원을 적절히 잘 할당하는 것
  • 프로세스들 사이에서 isolation을 제공(Memory Protection)

 

Step in Creating and Running Code

  • "Source file → (Compile) → Object file → (Linker) → Executable file"
  • "Executable file → (Loader) → memory"
  • Link: HDD에 들어가 있는 다양한 library들을 실행하기 위해 연결해주는 과정
  • 하나의 프로그램이 실행되기 위해서는 code, data, stack이 필요
  • os는 이 실행파일을 메모리의 어디 부분에 올릴지를 결정 "MMU"

 

MMU

  • Memory Management Unit
  • 메모리 공간에서 빈 공간을 찾아 프로그램을 올릴 때 주소를 조절해주는 역할: MMU의 relocation register

 

메모리 낭비 방지

Dynamic Loading(동적 적재)

  • 메모리의 효율성을 위해 필요한 루틴이 호출될 때 해당 루틴을 메모리에 적재하는 방식
  • Loading : 메모리로 데이터(.exe / code, data)를 옮기는 것

 

Dynamic Linking(동적 연결)

  • 여러 프로그램에 공통 사용되는 라이브러리를 관리하는 방법

 

Swapping

  • 메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스를 관리하는 역할

 

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 3(Paging)  (0) 2021.08.12
[개념] Memory Management 2  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12
[개념] I/O Management  (0) 2021.08.12

Operating-System Virtualization

  • os level virualization
  • 운영 체제의 커널이 하나의 사용자 공간 인스턴스가 아닌, 여러 개의 격리된 사용자 공간 인스턴스를 갖출 수 있도록 하는 서버 가상화 방식
  • 하나의 물리 머신 상에서 복수의 시스템을 동시 운영
  • CPU, 메모리, HDD 등을 소프트웨어를 통해 논리적으로 생성
  • 물리 서버 단위 → 애플리케이션 단위

 

구성요소

  • Service : 웹사이트와 같이 미들웨어 상에서 구현되는 것, 사용자의 최종 목적
  • Middleware(Application) : 사용자측 - middleware, 서버 측 - application, 프로그램을 의미
  • OS 
  • HDD
  • Memory
  • CPU

 

작동원리

  •  Hypervisor는 물리 리소스를 분할하여 이 리소스를 필요로 하는 VM이 사용하게 해줌
  • 가상환경이 실행중인 상태에서 사용자 또는 프로그램이 추가 리소스를 요구하는 명령을 내리면 하이퍼바이저는 그 요청을 물리 시스템에 전달해 실행

 

Hypervisor

  • 호스트 컴퓨터에서 다수의 운영 체제를 동시에 실행하기 위한 논리적 플랫폼
  • virtual machine monitor(VMM), virtual machine manager(VMM)
  • 하이퍼바이저가 설치된 물리 하드웨어를 host, 그 리소스를 사용하는 여러 VM을 guest
  • host는 필요한 리소스가 guest에게 제공될 수 있도록 CPU, 메모리, 스토리지, 기타 리소스의 가상 인스턴스를 제어함
  • 종류
    • Monolithic : 드라이버를 하이퍼바이저 안에 포함시켜 관리, OS가 없음
    • Microkernel : 각 하드웨어에 마이크로커널형 하이퍼바이저를 설치할 때마다 관리 OS 설치 

 

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 2  (0) 2021.08.12
[개념] Memory Management 1  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12
[개념] I/O Management  (0) 2021.08.12
[개념] Threads and Concurrency  (0) 2021.08.12

Inter-Process Communication

os kernel 구조

  • 프로세스들은 유저 공간(user-mode)에서 개별로 os로부터 할당받은 독립된 공간에 존재
  • kernel space에서 IPC기술을 통해 프로세스들 간 통신을 제공

 

종류

  • PIPE
    • 익명의 PIPE를 통해 동일한 PPID를 가진 프로세스들 간에 단방향 통신(Half Duplex)을 지원
    • 송수신을 위해선 2개의 파이프가 필요

 

  • Named PIPE
    • 이름을 가진 PIPE를 통해서 프로세스들 간에 단방향 통신을 지원
    • PIPE이름만 알면 프로세스들이 통신 가능
    • 송수신을 위해선 2개의 파이프가 필요

 

  • Message Queue
    • 메모리를 사용한 PIPE(컨테이너 벨트), 구조체 기반으로 통신
    • 메시지 큐에 쓸 데이터에 번호를 붙임

 

  • Shared Memory
    • 시스템 상의 공유 메모리를 통해 통신
    • IPC들 중에서 가장 빠르게 작동

 

  • Memory Map
    • 열린 파일을 프로세스의 메모리에 일정 부분 매핑시켜서 사용

 

  • Socket
    • 네트워크 소켓통신을 사용한 데이터 공유
    • 원격에서 프로세스간 데이터를 공유할 때
    • 네트워크 프로그래밍

 

  • Semaphore
    • 프로세스 간 데이터를 동기화하고 보호하는데 목적
    • 공유된 자원에 하나의 프로세스만 접근 가능하도록

 

 

참고: https://cho001.tistory.com/42

 

리눅스 IPC 프로그래밍(IPC종류) [1]

IPC(Inter Process Communication) - 프로세스 간 통신에 대하여 종류와 특징들에 대하여 살펴보겠습니다. [리눅스 커널 구조] - 위 그림처럼 Process는 완전히 독립된 실행객체입니다. 서로 독립되어

cho001.tistory.com

 

❗ 나중에 해당 코드들도 찾아보자...특히 shared memory, socket, semaphore

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 1  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] I/O Management  (0) 2021.08.12
[개념] Threads and Concurrency  (0) 2021.08.12
[개념] Process Management  (0) 2021.08.12

I/O System

  • OS code의 대부분을 차지
  • User의 체감 성능에 가장 중요한 영향을 미침
  • test하기 힘든 영역
  • Types of I/O Devices
    • Block Device
      • 데이터가 fixed-size block에 저장되고, block은 저마다의 주소를 갖는다
      • 이러한 block address를 통해 independently하게 access하여 R/W한다
      • Disk
    • Character Device
      • 데이터가 Stream 형태로 존재, 이미 처리한 데이터를 다시 처리할 수 없음
      • Address가 없다
      • Printer, Network Interface, Mice 등
    • Others
      • Clocks, Memory-Mapped Screen

 

Device Controller

  • 외부에서 들어온 데이터를 변환하여 Disk에 저장
  • H/W적인 error correction을 수행
  • DMA Operation(Direct Memory Access)
    • Device가 직접 Memory에 Access하는 기능
    • I/O Device에 Access할때, Controller에 있는 data register에 I/O Device가 읽거나 쓸 데이터를 저장하고 control register에 수행할 명령을 저장해 작업을 수행
    • 어떻게 Addressing할 것인가?

  • DMA(Direct Memory Access)
    • DMA Controller는 Physical Address를 바로 사용
    • Virtual Address를 사용하려면 MMU(Memory Management Unit)에 접근할 수 있어야 한다
  • DMA Transfer Mode
    • Cycle Stealing : CPU가 Memory에 Access하지 않는 타이밍에만 I/O Device와 Memory사이로 데이터를 옮김
    • Burst Mode : CPU가 한동안 Bus를 사용하지 못하게 제한, I/O Device가 Bus를 독점

 

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 1  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12
[개념] Threads and Concurrency  (0) 2021.08.12
[개념] Process Management  (0) 2021.08.12

Concurrency

  • 병행성, 병행적인 프로세스들의 집합으로 응용 프로그램을 구조화함으로써 구현됨
  • fork()
  • Overhead in Process Model : 여러 개의 프로세스를 사용하는 모델에서 각각의 프로세스는 독립적, 통신을 위해서는 커널을 통한 IPC(Inter Process Communication)가 필요 + PCB의 크기가 크다 ⇒ 프로세스의 생성과 context switching에 오랜 시간이 걸림

Thread

  • CPU 스케줄링의 기본 단위
  • 한 프로세스 안에서 제어의 흐름
  • pc, registers, stack ( 프로세스보다 작아 오버헤드를 줄임 )
  • 자신만의 레지스터 상태와 스택을 가짐
  • 같은 프로세스 안에서 여러 스레드 생성 가능, 프로세스를 위한 코드와 주소 공간과 운영 자원을 공유 가능
  • 스레드가 실행되는 환경 : task

single은 기존의 process와 같다

 

Multithreading

 

  • Single Processor : Concurrency 달성(병렬적인 것처럼 보임, 계산 속도를 증가)

  • Multiple Processor : Concurrency 달성(동시에 여러 스레드 실행, core의 병렬성)

 

User-level vs Kernel-level

  • User-level threads : 유저 레벨에서 라이브러리 호출을 통해 커널 위에서 유지됨
    • 스레드 관리가 유저 레벨에서 된다.
    • 커널 모드로 전환 불가능, 빠르고 간편
    • 애플리케이션에 특화된 스케줄링
    • Blocking problem : 하나의 스레드에서 I/O처리를 시작했을 때 다른 스레드에서 일 진행 못함, 멀티 프로세서의 concurrency유지 못함(커널이 스레드의 존재를 모름)
  • Kernel-level threads : 운영체제 안, 커널 안의 함수를 사용
    • 커널에 의해 관리된다.
    • 유저레벨에 비해 느리다
    • Blocking problem 없음
    • 현대 OS들은 커널을 지원
  • Multithreading Models(Mapping Model)
    • Thread libraries : 스레드를 생성하고 관리하기 위한 API, 유저 레벨과 커널 레벨의 역할이 서로 다름

user-level : 커널와 1:1 매칭 / kernel level : 다양한 매칭

  • Thread Mapping and scheduling
    • user level에서의 스케줄은 thread library를 통해 kernel level과 매핑되어 수행
    • kernel level의 스케줄은 물리적 cpu와 kernel level 스레드들이 커널을 통해 매핑
    • 병렬 실행 : virtual processor(커널 레벨)에 있는 스레드의 병행성, 물리적 코어들에 있는 스레드의 병행성
    • 실제 병렬성(parallelism) : 하나의 스레드 : 하나의 코어의 1:1 관계(thread pinning)

 

Threading Issues

  • fork() 이후에 exec()이 바로 호출되면, 모든 스레드를 복사할 필요가 없다.
  • Signals(sw interrupt)
    • Synchronous signals : 시그널을 발생시킨 동작을 수행한 프로세스에 전달
    • Asynchronous signals : 동작 중인 프로세스 바깥에서 발생한 이벤트에 의해 발생
  • Thread pools : 할 일을 기다리는 많은 스레드가 존재하는 풀 생성
    • 새 스레드를 생성하는 것보다 요청에 응답하는 게 조금 더 빨라짐
  • Thread Local Storaged(TLS) : 각각의 스레드들이 자기 자신만의 데이터를 가지게끔

 

❗ Concurrency는 한번에 많은 것을 처리(SW) / Parallelism은 한 번에 많은 일을 처리(HW)

'Computer Science > Operating System' 카테고리의 다른 글

[개념] Memory Management 1  (0) 2021.08.12
[개념] Virtualization  (0) 2021.08.12
[개념] IPC  (0) 2021.08.12
[개념] I/O Management  (0) 2021.08.12
[개념] Process Management  (0) 2021.08.12

+ Recent posts