본문 바로가기
운영체제

리눅스 운영체제 커널 파해치기 (1)

by 흰색남자 2022. 12. 25.

컴퓨터의 주요 구성요소는

1. CPU : 중앙처리장치

2. SSD OR HDD : 디스크

3. RAM : 메모리

+

4. OS : 운영체제로 구성된다.

 

운영체제는 자원 관리자의 역할을 하게된다.

========================================================================

자원이란 무엇일까?

물리적 자원과 추상적인 자원으로 구분할 수 있다.

1. 물리적 자원 : CPU, 램, 주변 장치, 네트워크, 터미널 등

2. 추상적 자원 : CPU가 추상화 시킨 태스크, 매모리, 세그먼트, 페이지, 파일, 프로토콜, 패킷 등

테스크 = 프로세스

 

 

운영체제는 컴퓨터에 있는 CPU, 메모리(RAM) 디스크의 자원을 관리하여 일반 사용자들이 컴퓨터를 사용할 수 있도록 지원해준다.

 

예를하나 들어보자.

우리가 파이썬, 자바를 프로그래밍하여 파일로 저장하게된다.

이 요청은 운영체제로 전달되어 파일이라는 객체로 관리된다.

이러한 파일들은 파일 inode 형태로 관리되는데, 

https://whiteman97.tistory.com/176

참고하자

 

운영체제는 디스크의 일부를 할당받아 파일의 내용을 저장하고, 파일의 메타 정보를 함께 저장하게 된다.

 

이 파일을 실행하게 되면, 운영체제는 해당 inode 정보를 가져와서 실행에 필요한 자원을 할당해주고 실행시킨다.

이 실행된 파일(프로그램)을 프로세스라 부르며 이 프로세스에서 작업의 흐름(자원의 흐름)의 단위를 스레드라 부르게된다.

========================================================================

 

1. 펌웨어랑 커널의 차이

커널 = OS라 부른다. 커널( OS )은 사용자의 사용자가 원하는 행위, 명령 (소스코드)을 진행할 수 있도록 하는 기술이고,

펌웨어는 커널안에 들어간 여러 기능들 중 일부, 모듈 중 일부라고 생각하면 좋다.

 

만약 운영체제가 없다면, 우리가 프로그램을 만들면서  자원을 할당, 네트워크 통신, 프로그램간 통신, 파일 시스템 관리 등 다양한 작업을 우리가 직접 펌웨어를 개발해서 실행시켜야한다. 이러한 수고를 운영체제(커널)이 대신해준다.

 

========================================================================

 

 

이제부터 운영체제 구조, 커널을 조금씩 뜯어보자



1. 리눅스의 논리적 구성요소

태스크 관리자

CPU가 물리적 자원을 태스크라는 추상적인 자원으로 제공해준다.

- 태스크의 생성, 실행, 상태전이, 스케줄링, 시그널 처리, IPC

 

 

파일시스템

디스크를 파일이라는 개념으로 제공해줌

- 파일 생성, 접근 제어, INODE 관리, 디렉터리 관리, 수퍼 블록 관리 

 

 

 

메모리 관리자

메모리를 세그먼트, 페이지라는 개념으로 제공해줌 

- 물리 메모리 관리, 가상 메모리 관리, 세그멘테이션 페이징, 페이지 부재 결함 처리

 

 

네트워크 관리자.

네트워크 장치를 소켓이라는 개념으로 제공해줌

- 소켓 인터페이스, 통신 프로토콜 제공

 

 

장치 관리자, 드라이버 관리자

각종 장치를 디바이스 드라이버를 통해 일관성 있게 접근이 가능하도록 해줌

- 디스크, 터미널, CD, NIC와 같은 주변 장치를 구동시킴

 

크게 5가지로 나눌 수 있다.

 

========================================================================

 

리눅스 커널은 우분투 20.04 버전 기준 "/usr/src" 에 존재한다.

 

 

1. arch 

리눅스 커널 중 하드웨어 종속적인 부분들이 구현됨.S

2. kernel 

태스크 관리자가 구현, 태스크의 생성과 소멸, 프로그램의 실행, 스케줄링, 시그널 처리 등

3. fs

리눅스에서 지원하는 다양한 파일 시스템과 open() read() write() emddml tltmxpa ghcnfdl rngusehla.

3. mm

메모리 관리자 - 물리, 가상 메모리 관리 태스크마다 할당되는 메모리 객체 관리 등

 

4. driver

리눅스에서 지원하는 디바이스 드라이브가 구현됨.S

5. net

- 커널이 지원하는 프로세스간 통신 기능이 구현된 디렉터리.

- 통신 프로토콜이 구현됨.

 

6. ipc

- 프로세스간 통신 기능이 구현된 디렉터리

- 파이프, 시그널 소켓

- message passing, shared memory, semaphore 등

 

7. init

커널 초기화 부분, 커널의 메인 시작 함수가 구현됨

 

8. include 

리눅스 커널이 사용하는 헤더 파일이 구현

 

 

리눅스 커널을 만드는 과정은 다음과 같이 진행됨.

1, 커널 구성

2. 커널 컴파일

3. 커널 인스톨

 

커널 구성은 새로 만들어질 리눅스 커널에 현재 시스템에 존재하는 하드웨어 특성, 커널 구성 요소, 네트워크 특성 등의 정보를 알려주는 과정.

 

 

========================================================================

 

태스크란 무엇일까?

 

1. 프로세스 vs 스레드

프로세스 : 커널로부터 자원을 할당받아 동작중인 프로그램

스레드 : 프로세스의 작업 수행의 단위

 

프로세스의 장단점 : 생성비용이 높지만, 결함(장애)가 발생하면 해당 프로세스만 장애가 발생함. 

스레드의 장단점 : 생성 비용이 적고, 결함(장애)가 발생하면 부모스레드로 전파가됨. 

 

프로세스의 메모리 구조

메모리상에 올라가면 다음과 같은 구조로 구성됨.

1. Heap : 동적 메모리 할당 영역

2. Stack : 프로그램 실해시 지역 변수, 환경 변수와 같은 변수들이 위치

3. BSS : 초기화 되지 않은 전역 변수나 정적 변수들이 저장.

4, DATA : 초기값이 있는 전역변수 // static

5. TEXT( CODE ) : 프로그램 실행을 시키는 바이트 코드가 들어감.

 

 

리눅스에서 프로세스(프로세스)  생성 과정은/??

 

사용자 프로세스, 쓰레드 생성 요청은 라이브러리를 거쳐 시스템 콜을 통해 리눅스 커널에 전달된다.

 

========================================================================

 

-- 프로그램 실행부터 CPU 코어에 할당까지========================================================================

일반적으로 운영체제는 스케줄링 작업 수행을 위해 수행 가능한 상태의 태스크를 자료구조를 통해 관리한다.

이러한 자료구조를 Run-queue, 런 큐 라고 부른다.

운영체제의 구현된 커널에 따라 런큐는 한개, 혹은 여러개 존재가 가능하다.

/usr/src/linux/sched/sched.h 파일에 struct_rq 라는 이름으로 정의됨.

 

 

 

테스크가 처음 생성되면 init_task 라는 이중 연결 리스트에 삽입된다.

리눅스에서는 CFS( Completely Fair Scheduler )를 사용하며, 실시간 태스크를 위해서는 FIFO, RR, DEADLINE 등 정책을 제공한다.

삽입된 테스크는 스케줄링 정책에 따라 Run-queue에 소속되게 된다.

 

 

 

========================================================================

 

 

스케줄링 동작 원리

컴퓨터 시스템에서 CPU 자원을 어떤 태스크가 사용하도록 할당할 것인가? 

 

일단 cpu의 태스크 할당에 관해서 적어보겠다.

필자의 컴퓨터는 i7-12세대이다. 8+4코어 / 16+4쓰레드를 지원하는 컴퓨터이다.

그럼 20개의 프로세스만 사용가능하느냐? 이건 아니다.

프로세스간 스케줄링 정책에 따라 다르다. 

 

일단 선점 스케줄링과 비선점 스케줄링에 대해서 알아보자

 

 - 선점 스케줄링 (preemptive scheduling)
한 프로세스가 cpu를 할당받아서 실행하고 있을 때 다른 프로세스가 cpu를 사용하고 있는 프로세스를 중지시키고 cpu를 차지할 수 있는 스케줄링 기법을 선점 스케줄링 기법이라고 한다.
우선순위가 높은 프로세스를 먼저 수행할 때 유리하고 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 유용한다.
많은 오버헤드(overhead)를 초래함
A라는 프로세스가 cpu를 사용하고 있을 때 잠시 중지시키고 B를 시키는 상황에 사용됨.
예 )  round robin, SRT, 선점 우선 순위 등의 알고리즘이 있다.

 - 비선점 스케줄링(non-preemptive scheduling)
이미 사용되는 cpu를 빼았지는 못하고 사용이 끝날 때 까지 기다리는 스케줄링 기법
할당 받은 cpu는 끝날 때 까지 사용함.
응답 시간을 예측할 수 있고 일괄 처리 방식이 적합하다.
모든 프로세스에 요구에 대해 공정하다.
중요도가 높은 작업이 낮은 작업이 기다리는 경우가 발생할 수 있다.
예 ) FCFS(first come first service), SJF(shortest job first), 우선 순위, HRN(heighest response next)등이 있다.
-> 높은 우선순위가 먼저 실행되고 낮은 작업이 기다리게 된다.

 

리눅스에서 기본 스케줄링 정책은 cfs이다.  a와 b 프로세스가 있으면 똑같은 시간을 사용하도록 공평한 정책이다.

또한 선점 스케줄링에 속하므로, 프로세스간 cpu를 선점해서 사용한다.

>> 20개의 작업 공간을 20개 이상의 프로세스가 나눠서 사용가능하다.

 

프로세스의 컨텍스트 스위칭 비용은 1마이크로초 ~ 1000 마이크로초이므로 사용자가 체감하지 못한다.

 

시분할 시스템 찾아보면 자세히 나옴.

초기 일괄처리 시스템, 일괄처리 시스템, 다중 프로그래밍, 시분할 시스템, 다중 처리 시스템, 분산 처리 시스템 등 여러가지가 있음.

 

 

 

 

'운영체제' 카테고리의 다른 글

스레드/프로세스 차이  (0) 2022.11.22
부모, 자식 프로세스, 쓰레드와 코어  (1) 2022.11.21
캐시 종류  (0) 2022.10.19
스토리지  (0) 2022.10.18
리눅스/파일 디스크립터  (0) 2022.10.14