일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Microtask Queue
- react
- 주니어개발자
- prettier-plugin-tailwindcss
- linux 배포판
- TypeScript
- Dockerfile
- 좋은 PR
- useEffect
- Render Queue
- Compound Component
- 프로세스
- 암묵적 타입 변환
- Custom Hook
- Event Loop
- docker
- Headless 컴포넌트
- Sparkplug
- useCallback
- CS
- type assertion
- React.memo
- 명시적 타입 변환
- task queue
- JavaScript
- useLayoutEffect
- AJIT
- useMemo
- prettier
- 타입 단언
- Today
- Total
구리
[용어] 운영체제, 프로세스, 그리고 커널 본문
개발 공부를 하면서 제대로 몰랐던 용어의 개념을 정리한 글입니다.
운영체제, 프로세스, 커널을 이해하기 위해선 컴퓨터가 어떤 구성으로 되어 있는지 먼저 알아야 합니다.
컴퓨터는 크게 하드웨어와 소프트웨어로 구성되어 있습니다.
하드웨어
- 컴퓨터를 구성하는 기계 장치로 소프트웨어가 지시한 일을 수행
- 크게 중앙처리장치 (CPU), 기억장치 (램, 하드디스크 등), 입력장치 (키보드, 스캐너 등), 출력장치 (모니터, 스피커 등)로 구성
- 입력장치를 통해 외부 데이터를 입력 받음 → 중앙처리장치에서 명령을 실행 → 기억장치에서 필요한 데이터 저장 → 출력장치를 통해 결과 출력
소프트웨어
- 하드웨어의 동작 지시 및 제어하는 역할의 프로그램, 프로그램에 필요한 데이터
- 크게 시스템 소프트웨어, 응용 소프트 웨어로 나눌 수 있음
- 시스템 소프트웨어 : 하드웨어 자원 관리 및 컴퓨터를 쉽게 사용하게끔 도와주는 역할 (운영체제, 언어 번역 프로그램 등)
- 응용 소프트웨어 : 특정 업무 수행을 위해 개발된 소프트웨어 (워드프로세서, 브라우저 등)
운영체제
운영체제는 하드웨어의 각 장치를 효율적으로 관리하고 컴퓨터를 편리하게 사용할 수 있는 환경을 제공하는 시스템 소프트웨어입니다.
즉, 컴퓨터 사용자와 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공해 줍니다.
커널
커널은 항상 메모리에 올라가 있는 운영체제의 핵심 부분으로, 하드웨어와 응용 프로그램 간의 인터페이스 역할을 하며 컴퓨터 자원들을 관리하는 역할을 합니다.
즉, 커널은 인터페이스로써 응용 프로그램 수행에 필요한 여러 서비스를 제공하고, 하드웨어(CPU, 메모리) 등의 리소스를 관리하는 역할을 합니다.
다만 커널은 항상 컴퓨터 자원만 바라보기에 사용자와의 상호작용은 지원하지 않습니다. 따라서 사용자와의 직접적인 상호작용을 위해 프로그램을 제공하는데, 대표적으로 쉘(Shell)이라는 명령어 해석기가 있습니다. 사용자는 쉘을 통해 커널에게 명령을 내릴 수 있습니다.
커널의 자원 관리
커널의 가장 큰 목표는 컴퓨터의 물리적 (하드웨어) 자원과 추상화 자원을 관리하는 것입니다.
같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 사용자가 직접 접근하는 것은 복잡할 수 있습니다. 일반적으로 커널은 운영체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 하드웨어 추상화를 구현합니다. 이러한 하드웨어 추상화는 사용자가 하드웨어의 복잡한 접근을 고민할 필요 없이 쉽게 개발하는 것을 돕습니다.
즉, 커널은 사용자가 하드웨어에 접근하고 통신하기 위한 중간 다리 역할을 수행합니다.
커널은 이를 위해 하나의 하드웨어 자원을 여러 사용자들을 위한 여러 개의 추상화된 객체로 관리하는데, 물리적 자원을 추상화하며 달라진 용어는 다음과 같습니다.
물리적 자원 이름 -> 추상화한 자원 용어
CPU -> 태스크(Task)
메모리(memory) -> 페이지(page), 세그먼트(segment)
디스크(disk) -> 파일(file)
네트워크(network) -> 소켓(socket)
커널은 컴퓨터의 물리적 자원과 추상화 자원을 관리한다고 얘기했습니다. 그래서 커널은 5가지 관리자들로 구성되어 있습니다.
- 태스트 관리자 : 물리적 자원인 CPU를 추상 자원인 태스크로 제공
- 메모리 관리자 : 물리적 자원인 메모리를 추상 자원인 페이지나 세그먼트로 제공
- 파일 시스템 관리자 : 물리적 자원인 디스크를 추상 자원인 파일로 제공
- 네트워크 관리자 : 물리적 자원인 네트워크 장치를 추상 자원인 소켓으로 제공
- 디바이스 드라이버 관리자 : 각종 외부 장치 (프린터 등)에 대한 접근을 제공
인터페이스로서의 커널
커널은 다양한 자원을 관리하는데 이는 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있게 하기 위해서입니다.
즉, 인터페이스로서 사용자가 컴퓨터만의 언어와 규칙으로 하드웨어와 통신할 수 있게 도와줍니다.
앞서 말한 커널 구성요소들이 존재하는 공간을 Kernel Space (커널 영역)라고 하며 그 위에는 User Space (사용자 영역)가 존재합니다.
User Space와 Kernel Space 사이에는 보이지 않지만 System Call Interface가 있습니다. User Space의 태스크 혹은 프로세스들이 커널이 관리하는 자원에 접근해야 할 경우 System Call Interface를 통해 Kernel Space의 자원관리자에게 요청이 전달되는 방식입니다.그러면 커널은 사용자 요청에 맞는 명령을 하드웨어에게 전달하고 작업을 수행하는 역할을 합니다.
즉, 커널은 사용자가 System Call을 통해 컴퓨터 자원을 사용할 수 있게 해주는 자원 관리자입니다.
참고로 각각의 영역을 분리한 이유는 운영체제의 핵심기능이 전부 들어있는 커널을 보호하기 위해서입니다.
프로세스
대부분의 프로그램은 보조기억 장치에 저장되어 있다가 실행 명령을 받으면 주기억장치로 올라가 중앙처리장치에 의해 실행됩니다.
이때, 실행되기 위해 주기억장치로 올라간 프로그램을 프로세스라고 합니다.
프로세스에는 프로그램 코드, 실행에 필요한 다양한 정보가 포함되어 있습니다.
프로그램과 프로세스
프로그램은 일반적으로 하드 디스크 등에 저장되어 있는 실행 코드를 의미하고, 프로세스는 프로그램을 구동한 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되고 있는 작업 단위를 칭합니다.
따라서 하나의 프로그램을 여러 번 구동하면 여러 개의 프로세스가 메모리 상에서 실행됩니다.
참고 자료
https://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_(%EC%BB%B4%ED%93%A8%ED%8C%85)
https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90_%EA%B3%B5%EA%B0%84
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4
'기타' 카테고리의 다른 글
[용어] 프로세스? 스레드? 무슨 차이가 있을까? (0) | 2023.10.05 |
---|---|
[회고] 잘 성장하고 있는 걸까? (0) | 2023.09.20 |
[용어] 추상화 그리고 가상화 (1) | 2023.08.12 |
[용어] 컴파일과 인터프리터의 차이 (0) | 2023.08.08 |
[용어] 런타임과 런타임 환경이란 (0) | 2023.08.08 |