이제 OS에 대하여 간단히 얘기를 할건데 OS는 시스템프로그램에서 자세히 다루는 내용이 아니여서 간단히만 설명하고 넘어가도록 할것이다.
OS의 기능은 크게 UI, 리소스 관리, Process 관리, 보안이 있다.
UI부터 살펴보자면 UI는 User Interface의 약자이며 우리가 컴퓨터를 켰을때 나타나는 바탕화면등이 있다. UI는 크게 세가지로 나눌 수 있는데 CLI(Comman Line Interface) Shell을 사용한 UI 이전 게시물에서 ./를 활용해 명령을 내리던 컴파일러를 말한다, GUI(Graphical User Interface)는 앞서 말했던 컴퓨터의 바탕화면, 지하철표, 영화관표 자동 구매 장치의ㅡ 화면들을 GUI라고 한다, HCI(Human Cpmputer Interface)는 요즘 유행하는 지문인식, 홍채인식 그리고 심지어 기분상태까지 알아내는 기술을 HCI라고 한다.
리소스 관리는 하드웨어 소프트웨어의 관리를 뜻한다. 예를 들자면 CPU는 하나인데 두개의 프로그램을 실행해야 할때 어떤 프로그램을 먼저 실행해야하는가를 판단해준다.
Process 관리는 이미 실행중인 앱들을 관리하는 기능이다. 지금 열려있는 프로그램이 어디까지 실행되어있고 지금 실행하는 파일들이 몇개 있고 등 기능이다.
마지막으로 기본적인 컴퓨터의 보안,보호역활을 해주고 있다.
우리가 시각적으로 보면 OS는 애플리케이션과 하드웨어 중간에 껴있으며 Application이 하드웨어에 접근하기 위해선 무조건 OS를 거쳐서 실행 가능하도록 만들었다.
그 다음 개념은 Context Switching이라는 것인데
현재 CPU의 Time이 흘러가고 있는데 Process A 프로그램 A가 실행을 하고 있었는데 키보드나 디스크에가서 데이터를 읽으려고 하면 Process A는 잠시 멈추고 Process B로 넘어가 실행을 한다. 왜냐하면 A가 데이터를 찾는데 꽤 오랜 시간이 걸리기 때문이다. 이렇게 A에서 B로 넘어가는 전환을 Context Switching이라고 한다. 그럼 A의 데이터들은 switching이 일어날때 Kernel에 보관이된다.
잠시 virtual address space를 살펴보고 넘어가도록 하자. 가상 메모리 공간은 c언어를 배우면서 많이 봤던 개념이다.
Read-only code and data는 주로 상수 또는 문자열들이 들어간다.
Read/write data는 우리가 보편적으로 쓰는 다양한 변수들이 할당된다.
Run-time heap은 우리가 동적할당을 사용할 때 메모리들이 포함된다. 이 공간은 아래에서 위로 채워진다.
Memory-mapped region for shared libaries는 말 그대로 다양한 library들이 저장되 있는 공간이다.
User stack은 function call을 하게 될 경우 이 곳에 저장되어 진다.
이 가상 메모리 공간에서 왜 0부터 시작하지 않냐고 물어볼 수도 있는데 이는 포인터를 사용하였을 때 메모리 주소가 0부터 시작이 된다면 0이 아닌 NULL이 리턴되기 때문이다.
가상 메모리 공간은 가상 공간이기 때문에 많은 데이터를 저장할 수 있다. 그런 의미에서 실제 메모리 공간에는 가상 메모리 공간의 일부 데이터들만 저장한다.
시스템은 네트워크를 사용해서 다른 시스템을 통과합니다. 네트워크의 많은 내용은 굳이 여기서 언급을 많이 할 필요가 없어서 정말 주요한 포인트만 집고 넘어가도록 하자.
telnet이란건 네트워크를 통하여 내 컴퓨터로 다른 컴퓨터를 조종할 수 있다 라는 개념이라고 한다.
그리고 Concurrency와 Parallelism이라는 개념에 대해서 얘기할 것이다.
Concurrency란 한국어로 동시성, 여러앱이 CPU에서 번갈아가며 실행하는 개념이라고 생각하면 된다. 예를 들면 인터넷 홈페이지 하나에 여러사람이 동시에 접속하는 것이다. 주로 사람들은 다른 사람들과 동시에 웹사이트를 사용한다고 느낄 수는 없겠지만 갑자기 한 서버에 여러명이 접속을 하면 뼈져리게 느껴지게 된다.
Parallelism은 병렬성, 정말 CPU 하드웨어가 여러개 같이 수행하는 것을 parallelism이라고 한다.
Parallelism의 큰 예시는 Hyperthreading로 예를 들수 있겠다. Hyperthreading 이란
위 그림에서 레지스터가 하나로 표시되어 있지만 사실은 두개입니다. 위의 멀티코어 CPU장치에서 앱A가 실행하고 있을 때, 코어는 하나의 프로그램만 실행할 수 있다. 근데 갑자기 앱B가 실행해야 할때 core는 다른 하나의 레지스터를 사용한다. 이렇게 코어안의 레지스터에 저장하게 되면 컨택스위칭의 횟수가 줄어들게 됩니다. 그러므로 동시에 실행되는 것은 아니지만 두개의 레지스터가 있으므로 거의 두개의 프로그램이 동시에 실행되는 것처럼 보인다.
현재 인텔 i7 core CPU에선 4개의 core가 존재하고 각 코어에 2개의 thread가 존재함으로 마치 동시에 8개의 thread가 사용되는 것처럼 보인다.
그리고 병렬성 구조에서 SIMD라는 대표적인 개념이 있다. 이 개념에 대해선 3장에서 곧 배우게 되니 조금만 기다리고 나중에 차근차근 배워보도록 하자.
'시스템프로그램' 카테고리의 다른 글
[시스템프로그램]02-2-1 정수의 사칙연산(1) (0) | 2020.04.27 |
---|---|
[시스템프로그램]02-1-3 정보의 표현과 활용(3) (2) | 2020.04.26 |
[시스템프로그램]02-1-2 정보의 표현과 활용(2) (2) | 2020.04.20 |
[시스템프로그램]02-1-1 정보의 표현과 활용(1) (0) | 2020.04.20 |
[시스템프로그램] 01-1 컴퓨터 시스템의 투어 (2) | 2020.04.17 |
댓글