1. 운영체제란 ?

운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.

*운영체제의 목적

처리능력 향상, 사용 사능도 향상, 신뢰도 향상, 반환시간 단축 등이 있다. 처리능력, 반환시간, 사용가능도, 신뢰도는 운영체제의 성능을 평가하는 기준이 된다.

1. 처리능력(Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양
2. 반환시간(Turn Around Time) : 시스템에 작업을 의뢰한 시간부터 처리가 완료하는데까지 걸린 시간
3. 사용가능도(Avaliability) : 시스템을 사용할 필요가 있을 때 즉시 사용가능한 정도
4. 신뢰도(Reliability) : 시스템이 주어진 문제를 정확하게 해결하는 정도

*운영체제의 역할

1. 프로세스 관리

운영체제에서 작동하는 응용 프로그램을 관리하는 기능이다. 어떤 의미에서 프로세서(CPU)를 관리하는 것이라고 볼 수도 있다.

  • 프로세스 스케줄링 및 동기화 관리담당
  • 프로세스 생성과 제거, 시작과 정지, 메세지 전달

2. 저장장치 관리

1차 저장장치에 해당하는 메인 메모리와 2차 저장장치에 해당하는 하드디스크, NAND 등을 관리하는 기능이다.

3. 네트워킹

TCP/IP 기반의 인터넷에 연결하거나, 응용 프로그램이 네트워크를 사용하려면 운영체제에서 네트워크 프로토콜을 지원해야 한다. 현재 상용 OS들은 다양하고 많은 네트워크 프로토콜을 지원한다.

운영체제는 사용자와 컴퓨터 하드웨어 사이에 위치해서, 하드웨어를 운영 및 관리하고 명령어를 제어하여 응용 프로그램 및 하드웨어를 소프트웨어적으로 제어 및 관리를 해야한다.

4. 사용자 관리

운영체제는 각 계정을 관리할 수 있는 기능이 필요하다. 사용자 별로 프라이버시와 보안을 위해 개인 파일에 대해선 다른 사용자가 접근할 수 없도록 해야 한다. 이 밖에도 파일이나 시스템 자원에 접근 권한을 지정할 수 있도록 지원하는 것이 사용자 관리 기능이다.

5. 디바이스 드라이버

운영체제는 시스템의 자원, 하드웨어를 관리한다. 시스템에는 여러 하드웨어가 붙어있는데, 이들을 운영체제에서 인식하고 관리하게 만들어 응용 프로그램이 하드웨어를 사용할 수 있게 만들어야 한다.

따라서, 응용 프로그램이 운영체제 안에 하드웨어를 추상화 해주는 계층이 필요하다. 이 계층이 바로 디바이스 드라이버이다.

2. 쓰레드, 프로세스

프로세스 : 프로그램을 메모리 상에서 실행중인 작업
스레드 : 프로세스 안에서 실행되는 여러 흐름 단위

Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령) Data : 전역변수, 정적변수, 배열 등 (초기와된 데이터) Heap : 동적 할당 시 사용 (new(), mallock() 등) Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)

  • 스레드는 Stack만 따로 할당받고 나머지 영역은 서로 공유

  • 하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드같이 생성

  • 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재한다.

* 멀티 프로세스 : 하나의 컴퓨터에 여러 CPU 장착 > 하나 이상의 프로세스들을 동시에 처리(병렬)

  • 장점 : 안정성
  • 단점 : 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을수록 오버헤드가 발생한다. (Context Switching으로 인한 성능 저하)

Context Switching이란?

프로세스의 상태 정보를 저장하고 복원하는 일련의 과정

즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함

* 멀티 스레드 : 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 한다.

  • 장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소한다. 전역 변수와 정적 변수에 대한 자료 공유가 가능하다.
  • 단점 : 안전성 문제가 있다. 하나의 스레드가 데이터 공간을 망가뜨리면 모든 스레드가 작동 불가능함. (공유 메모리를 갖고 있기 때문에)