본문 바로가기

Cloud/Server

[Server] 소프트웨어의 종류 및 동작 원리 / 운영체제, 커널, 프로세스와 스레드

 

소프트웨어 (SWㆍSoftware)

- 하드웨어에서 구동되는 논리적인 무형물로, 사용자의 명령을 하드웨어에게 전달해주는 시스템 구성 요소 중 하나.

 

우리가 흔히 데스크탑이나 노트북으로 사용하는 Windows도 하나의 소프트웨어다.

소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 분류된다.

 

 

 

 

[그림 1] 시스템 소프트웨어가 OS, Kernel / 응용 소프트웨어가 Application이라고 보면 된다.

하드웨어가 없으면 애초에 소프트웨어를 설치할 수 없고, 소프트웨어가 없는 하드웨어는 빈 껍데기나 다름 없다.

 

서로 반대되는 개념보다는 각자 역할을 갖고 시스템을 이루는 상호 보완적 관계라고 보면 된다.

 

 

 

01. 시스템 소프트웨어 (System Software)

- 시스템 구동에 필수로 요구되며, 응용 소프트웨어를 실행하기 위한 플랫폼을 제공해주는 소프트웨어.

- 시스템이 구동된 후, 종료 전까지 실행된다.

- 사용자 명령에 따라 시스템 리소스를 제어하고 관리한다.

- 운영체제; Windows, Linux 처럼 범용적으로 쓰인다. (ex. 스마트폰의 AndroidOS/iOS)

 

 

02. 응용 소프트웨어 (Application Software)

- 시스템 구동 후, 사용자의 요청 시에 실행되는 특수 용도의 소프트웨어.

- 프로그램 용도에 따라 다르지만, 시스템 구동에 필수적이지 않다.

- 응용 프로그램; MS Office, Photoshop 처럼 특정 작업을 위해 쓰인다. (ex. 스마트폰의 카카오톡/멜론)

 

 

 

※ 예시로 우리가 발표 자료를 만들려면,

노트북(하드웨어) → Windows(시스템 소프트웨어) → PPT (응용 소프트웨어) 순서로 구동해야 하는 과정으로 이해하면 쉽다.

 

 

 


운영체제 (OSㆍOperating System)

운영체제는 간단히 말해

시스템 자원들을 효율적으로 관리해주고, 사용자가 편리하게 접근하도록 환경을 제공해주는 여러 프로그램의 모음이다.

 

 

 

 

01. 운영체제의 기능

- 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원 관리

- 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능 제공

- 사용자와 시스템간의 편리한 인터페이스 제공

- 시스템의 각종 하드웨어와 네트워크를 관리 및 제어

- 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공

- 시스템의 오류 검사 및 복구

- 자원 보호 기능 제공

- 입출력에 대한 보조 기능 제공

- 가상 계산기 능력 제공

 

 

 

02. 운영체제의 목적

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

 

 

 

03. 운영체제의 주요 자원 관리

프로세스 관리  - 프로세스 스케줄링 및 동기화 관리 담당
 - 프로세스 생성과 제거, 시작과 정지, 메시지 전달 등의 기능 담당 
기억장치 관리 프로세스에게 메모리 할당 및 회수 관리 담당
주변장치 관리 입출력 장치 스케줄링 및 전반적인 관리 담당 
파일 관리 파일의 생성과 삭제, 변경, 유지 등의 관리 담당 

 

 

 

 


커널 (kernel)이란?

 

하드웨어가 부팅되면 디스크에 저장된 운영체제는 메모리에 올라가야 한다.

메모리 입장에선 무거운 운영체제가 모두 넘어오면 공간 낭비가 심할 것이다.

따라서 메모리는 운영체제의 필요한 부분만 올려놓고 그 외의 부분은 필요 시에 가져다 쓰는데, 그 중 메모리에 상주하는 중요 영역을 커널 (Kernel)이라고 한다.

 

커널은 메모리에 상주하는 영역이자 운영체제의 핵심적인 역할을 담당한다.

- 시스템 리소스에 대한 요청을 주고받고, 리소스 관리를 하는 것도 커널의 역할이다.

 

 

 

 

운영체제에는 사용자 모드(User Mode)와 커널 모드(Kernel Mode)가 있다.

 

 

 

01.  사용자 모드 (User Mode)

- Ring 3에 해당

- 응용 프로그램이 사용하는 영역으로, 주로 사용하는 명령어가 쓰인다.

 

 

02.  커널 모드 (Kernel Mode)

- Ring 0에 해당

- 운영체제가 사용하는 영역으로, 특정 권한이 필요한 명령어 수행이 가능하다.

 

 

 

 

Ring 1 ~ 2는 장치 드라이버 전용이다.

이러한 영역이 굳이 나뉜 이유는 중요 데이터에 영향이 끼치는 명령어는 커널 모드에서만 수행되도록 보안을 유지하기 위해서이다.

 

 

※ 사용자 모드에서 특권이 필요한 명령어를 수행하려면?

시스템 콜 (System Call)이라는,

커널에게 대신 요청하여 수행한 후 사용자 모드에게 전달하는 호출 인터페이스를 통해 수행된다.

 

 

 


프로그램, 프로세스, 스레드

 

 

 

01. 프로그램 (Program)

- 사용자가 작업을 하기 위해 실행할 수 있는 단위

- 프로그래밍 언어로 수행 절차를 표현해놓은 명령어들의 집합으로, 그 데이터가 파일로 묶여 보조기억장치에 저장된다.

 

 

 

 

02. 프로세스 (Process)

 

- 운영체제로부터 필요한 자원을 할당받은, 실행중인 프로그램

- 프로그램이 실행되면, 프로세스는 메모리 주소 공간(Code, Data, Stack, Heap)을 할당 받는다.

 

 

Code 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행되는 기계어 형태로 변환되어 저장되는 공간 (Read Only)
Data 전역 변수(global), 정적 변수(static), 배열(array), 구조체(structure) 등 프로그램이 사용하는 데이터를 저장하는 공간
Stack 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역 변수, 매개 변수, 리턴 값)를 임시로 저장하는 공간
Heap 프로그래머가 필요 시 동적으로 사용하는 메모리 영역

 

 

 

 

03. 스레드 (Thread)

- 프로세스가 할당받은 자원을 이용하는 실행하는 단위이자 프로세스 내에서 실행되는 여러 흐름의 단위

- 프로세스는 최소 한 개 이상의 스레드를 가지며, 프로세스가 OS로부터 자원을 할당받으면 그 자원을 스레드가 사용한다.

- 각 스레드는 독자적인 Stack 영역을 가지며, 나머지 주소 공간인 Code, Data, Heap 영역은 스레드 간 공유된다.

 

 

 

프로세스보다 더 작은 단위 개념인 스레드가 나오면서,

하나의 프로세스 내에서 동시 작업을 수월하게 처리할 수 있게 되었다.

 

 

 


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

 

 

01. Multi-Process

하나의 프로그램을 여러 프로세스로 나누어 작업을 병렬 처리하는 방식.

단일 CPU 환경보다는 당연히 속도도 빠를 것이고, 하나의 CPU에 문제가 생겨도 시스템 자체에 문제가 생기지는 않는다.

- 속도는 좀 느려질 수 있음

 

다만, 각 CPU는 서로 메모리를 공유하지 않으므로 작업량이 많아지면 성능 저하가 발생할 수 있다.

 

 

 

02. Multi-Thread

하나의 CPU에 여러 스레드로 자원을 공유하고 작업을 나눠 수행하는 방식.

서로 간 자원(Stack 영역 제외)을 공유하기 때문에, 자원을 효율적으로 사용할 수 있고 서로 간 통신이 간단하다.

 

하지만, 서로 공유해서 사용하므로 자원 선점(Deadlock) 및 동기화 등의 문제가 발생할 수 있다.

- 하나의 스레드에 문제가 생겨도 프로세스에 문제가 발생할 수 있음

 

 

 

 

구성된 플랫폼 환경마다 조금씩 세부 차이는 있겠지만,

위에 그린 프로세스와 스레드 그림도 멀티 프로세스, 멀티 스레드 구조라고 보면 된다.

 

 


 

업무동안 느낀건, 하드웨어보다 소프트웨어 관리가 훨씬 어렵다고 느꼈다.

 

아무래도 논리적인 환경이기 때문에 라이센스 관리도 어렵고,

S/W 문제가 생길 경우 하드웨어처럼 수급된 부품을 뚝딱 교체한다고 끝나는게 아니다보니ㅎㅎ

 

쉬운거 하나 없네