tech

운영체제

Siyoon Jeon 2021. 8. 10. 22:36

운영체제 개요

컴퓨터나 스마트폰의 기기 그 자체, 즉 하드웨어는 스스로 할 수 있는 일이 없다. 설계를 바탕으로 하드웨어에게 일을 시켜야만 의미가 있다. 그것이 바로 운영체제다. 그럼 운영체제가 하는 일이 무엇일까?

 

운영체제

1. 시스템 자원 관리

운영 체제가 없다면, 응용 프로그램이 실행될 수 없다.

 

응용 프로그램: 컴퓨터를 이용해 다양한 작업을 하는 것이 목적

운영체제: 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 도와줌.

 

하드웨어를 구성하는 일은 CPU, 자료를 저장하는 RAM, 디스크 등의 시스템 자원을 관리하는 주체를 '운영체제' 라고 한다.

 

  • 프로세스 관리(CPU)
  • 메모리 관리
  • I/O(입출력) 관리 (디스크, 네트워크 등
Operating
System
User Program
User Interface
Systen Calls
Program
Control
I/O File
System
Comms Error
Mngt
Resource Auditing Security
Hardware

 

2. 응용 프로그램 관리

응용 프로그램 보안을 위해 권한에 대한 관리가 필요하다.

응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한사용자를 관리한다.

 

공룡책 : https://codex.cs.yale.edu/avi/os-book/OS10/index.html

한글 버전 : https://parksb.github.io/article/5.html

 

 

 

프로세스, 스레드, 멀티 스레드

프로세스 (Process)

  • 운영체제에서 실행 중인 하나의 애플리케이션
  • 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행한다. 이때 필요한 메모리응 받아 앱의 코드를 실행하는데, 이 앱을 프로세스라고한다. 크롬 브라우저 2개를 실행하면 2개의 프로세스가 생성된다. 이렇게 여러 프로세스를 만들기도한다.

스레드 (Thread)

  • 사전적 의미는 한 가닥의 실이라는 뜻
  • 한 가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래됨
  • 하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에, 한 프로세스 내에 스레드가 두 대라면 코드가 실행되는 흐름이 두 개 생긴다는 의미

 

멀티 스레드 (Multi-Thread)

  • 멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것
  • 운영체제는 멀티 태스팅을 할 수 있도록, 프로세스마가 CPU 및 메모리 자원을 적정히 할당하고 병렬로 실행한다. 여러가지 프로그램을 같이 돌릴 수 있다.
  • 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있도록 하는 것도 멀티 스레드
  • 대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는데에 사용
  • UI가지고 있는 앱에서 네트워크 통신을 하기 위해 사용할 수도 있다.
  • 여러 클라이언트의 요청을 처리하는 서버를 개발할 때도 사용한다.

 

 

 

멀티 스레드

스레드의 특징

  • 프로세스 내에서 실행되는 흐름의 단위
  • 각 스레드마다 call stack이 존재(call stack: 실행중인 서브루틴을 저장하는 자료 구조) 공유 x
  • 스레드는 다른 스레드와 독립적으로 동작

 

멀티 스레딩의 장점

  • 프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현한다면, 메모리 공간과 시스템 자원의 소모가 줄어듬.
  • 스레드 간의 통신이 필요한 경우, 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용한다.
  • 따라서 프로세스 간 통신(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
  • 시스템의 처리량(Throughput)이 향상되고 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축된다.
  • 이런 장점 때문에 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레드로 나워서 수행한다.

 

멀티 스레딩의 문제점

  • 프로세스 간 공유하는 자원이 없다.
  • 따라서 동일한 자원에 동시에 접근하는 일이 없지만, 멀키 스레딩을 기반으로 프로그래밍을 한 때 공유하는 자원에 대하여 고민이 필료하다. 서로 다른 스레드가 같은 데이터에 접근하고, 힙 영역을 공유하기 때문에 서로 다른 스레드가 서로 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있다.
  • 따라서 멀티스레딩 환경에서는 동기화 작업이 필요하다. 동시화를 통해 작업 처리 순서를 제어하고, 공유 자원에 대한 접근을 제어해야한다.
  • 관련 키워드 : 데드락(Deadlock, 교착 상태), 뮤텍스(Mutex), 세마포어(Semaphore)

 

동시성과 병렬성의 차이

  • 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 갯수로 제한된다.
  • 운영체데는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다. 이것은 '시분할'이라고 한다.
  • Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
  • Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨

 

Context Switching

  • 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 태스크를 멈추는 것을 말한다.