운영체제
운영체제 개요
- 운영체제: 컴퓨터나 스마트폰의 하드웨어에게 일을 시키는 주체
- 운영체제가 없다면, 응용 프로그램도 실행될 수 없음
- 응용 프로그램은 하드웨어를 이용해 다양한 작업을 하는 것이 목적
- 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬수 있도록 돕는 것이 목적
- 운영체제의 주요 기능
- 시스템 자원 관리
- 프로세스 관리(CPU)
- 메모리 관리(RAM)
- Input/Output(입출력) 관리(디스크, 네트워크 등)
- 응용 프로그램 관리
- 응용 프로그램이 실행되고, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리
- 응용 프로그램: 운영체제를 통해 컴퓨터에게 일을 시키는 것
- 컴퓨터에게 일을 시키기 위해서는 운영체제로부터 권한을 부여받아야 함
- 부여받은 권한을 통해 운영체제가 제공하는 기능을 이용함
- 운영체제가 제공하는 기능을 통해 컴퓨터에게 일을 시킴
- 운영체제는 이를 위해 응용 프로그램에게 인터페이스를 제공해야 함(API)
- 시스템 콜(System call): 응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제 차원에서 다양한 함수를 제공하는 것
- (ex) 응용 프로그램이 프린터 사용 권한을 획득한 후, 프린터를 사용할 때 필요한 API를 호출해야 함, 이 API가 시스템 콜로 이루어져 있음
프로세스, 스레드, 멀티 스레드
- 프로세스(Process): 운영체제에서 실행 중인 하나의 에플리케이션을 지칭
- 에플리케이션을 실행하면, 운영체제로부터 메모리를 할당받아 코드를 실행
- 하나의 에플리케이션은 여러 프로세스를 만들기도 함(크롬에서 브라우저를 2개 실행하는 등)
- 스레드(Thread): 하나의 스레드는 코드가 실행되는 하나의 흐름을 의미함
- 한 프로세스 내에 스레드가 2개라면 코드가 실행되는 흐름이 두 개 생긴다는 의미
- 멀티 스레드(Multi-Thread): 두 가지 이상의 작업을 동시에 처리하는 것을 의미함
- 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행
- 워드로 문서작업을 하면서, 동시에 크롬 브라우저에서 음악을 들을 수 있음
- 멀티테스킹이 꼭 멀티 프로세스를 의미하는 것은 아니다
- 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 어플리케이션도 있음
- 멀티 스레드로 하나의 프로세스에서 두 가지 이상의 작업을 처리할 수 있게 함
- 멀티 프로세스는 운영체제 내부에서의 에플리케이션 단위의 멀티 태스킹
- 멀티 스레드는 에플리케이션 내부에서의 스레드 단위의 멀티 태스킹
- 대용량 데이터 처리시간을 줄이기 위해 데이터를 분할, 병렬 처리하는데에 이용
- UI를 가진 에플리케이션의 네트워크 통신에도 이용
- 여러 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용
멀티 스레드
- 스레드의 특징
- 프로세스 내에서 실행되는 흐름의 단위(코드)
- 각 스레드마다 call stack이 존재(call stack: 실행 중인 서브루틴을 저장하는 자료 구조)
- 스레드는 다른 스레드와 독립적으로 작동
- 멀티 스레드의 장점
- 프로세스를 동시 이용하여 처리하던 일을 멀티 스레드로 구현하면, 메모리 공간과 시스템 자원의 소모를 줄여줌
- 스레드 간의 통신에도 별도의 자원 소모 없이, 전역 변수 공간 또는 동적 할당 공간 Heap을 이용
- 프로세스 간 통신 방법(IPC)에 비해 훨씬 간단, 자원 소모도 줄어듬
- 시스템의 처리량(Throughput)이 향상, 자원 소모 감소, 프로그램 응답 시간 단축
- 멀티 스레드의 문제점
- 멀티 프로세스 기반은 프로세스 간 공유 자원이 없어 자원 간섭이 없음
- 멀티 스레딩 기반은 공유하는 자원이 문제가 됨
- 서로 다른 스레드가 같은 데이터에 접근하고 힙 영역을 공유함
- 서로 사용중인 변수나 자료구조에 접근하여, 잘못된 값을 읽어오거나 수정하는 일이 발생할 수 있음
- 그렇기 때문에, 멀티 스레딩 환경은 동기화 작업이 필요함, 작업 처리 순서를 제어, 공유 자원 접근을 제어
- 데드락(Deadlock, 교착 상태)
- 뮤텍스(Mutex)
- 세마포어(Semaphore)
- 동시성과 병렬성의 차이
- 동시에 돌릴 수 있는 스레드 수는 컴퓨터의 코어 개수로 제한됨
- 시분할: 운영체제(또는 가상 머신)는 각 스레드를 시간에 따라 분할, 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 제어함
- Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
- Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨
- Context Switching: 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 태스크를 멈추는 것