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