Linux에서 운영 체제와 커널이 개별적으로 처리되는 이유는 무엇입니까? [닫은]


9

우분투를 포함한 모든 Linux 운영 체제와 관련하여 사람들은 커널운영 체제 라는 용어를 구별하는 경향이 있습니다 . 이것은 Windows 및 OS X 제품군에 적합하지만 Linux 커뮤니티에서 왜 널리 퍼져 있습니까? OS 자체를 업데이트하지 않고 OS 커널을 업데이트하는 방법이 있습니까? 혹은 그 반대로도? 그렇다면 어떻게 유용 할 수 있습니까?


3
단순함 : 자유. 필요하다고 느끼는 모든 것을 자신 만의 버전으로 만들 수있는 자유. 핵심? 껍질? 데스크탑. 해봐
Rinzwind

6
그들은 때문에 있는 별도의? 창 관리자가 X 서버와 별도로 처리되는 이유 (분리되어 있기 때문에)와 쉘이 터미널 에뮬레이터와 별도로 처리되는 이유 (분리되어 있기 때문)도 마찬가지입니다. 이제 왜 그런 식으로 설계되었는지 물어 보면 ...
user253751

우분투는 이제 Windows 10 커널에서 실행되어 실제로 분리되어 있음을 보여줍니다. 물론 Windows에는 약간 복잡하게하는 X 서버가 제공되지 않지만 부품이 없을 경우 예상됩니다.
MSalters

@MSalters Windows의 창 관리자는 약간 까다 롭습니다. 그러나 누군가가 실제로 Windows에서 X를 실행하려는 경우 처리 방법이 많이 있습니다. 외부인에게 가장 쉬운 것은 아마도 기존 창 관리자 위에 서버 "에뮬레이터"일 것입니다.하지만 그것이 얼마나 잘 매핑 될 수 있는지 잘 모르겠습니다 (마지막으로 X 내부를 보았을 때 나는별로 희망적이지 않았습니다). 나는 숨을 참지 않을 것입니다. 많은 사람들이 Windows에서 X를 실행하는 데 관심이있는 것처럼 들리지 않습니다.
Luaan

답변:


12

전체 GNU / Linux 시스템은 모듈 식 접근 방식을 사용하여 구축됩니다. 대부분 다른 모듈을 건드리지 않고 단일 모듈을 업그레이드 ( 일반적으로 교체) 할 수 있습니다 . 문제의 모듈은 부트 로더, 커널, 쉘, 명령, 데스크탑 환경, GUI 응용 프로그램 등 무엇이든 될 수 있습니다.

물론 종속성을 올바르게 관리 할 수있는 한 사실입니다. 우분투 주변의 배포판에서 APT 는 의존성을 자동으로 해결하는 데 사용됩니다.

다음 명령을 사용하여 다른 커널 버전을 설치할 수 있습니다.

sudo apt install linux-image-<version>

APT가 허용하는 한, 선택한 커널 버전을 재부트하고 사용할 수 있어야하며, 일반, 낮은 지연 시간 등이 필요합니다. 또는 Real-Time Linux 와 같은 커널 버전을 직접 빌드 하여 현재 시스템과 함께 사용하십시오 .


고맙지 만 일관성이 있습니까? 예를 들어 Ubuntu 14.04 LTS에는 커널 버전 3.19.0이 있으며 커널을 업데이트하는 경우 더 이상 14.04 LTS가 아닙니다. 나중에 전체 시스템을 업데이트하려고하거나 내장 업데이트 메커니즘 (Software Updater)에서 새 버전을 가져 오면 업데이트 된 커널 버전을 알고 있습니까? 이미 업데이트 된 모듈에 영향을주지 않고 모듈을 개별적으로 점검하고 필요한 변경 만 가져올 수 있습니까?
꿈의 바람

1
각 Ubuntu 버전이 지원 하는 커널 버전 목록은 packages.ubuntu.com/search?keywords=linux-image 를 참조하십시오 . 우분투 버전은 커널 버전과 다른 점에 의해 결정되지만 실제로 어떤 버전인지 알지 못합니다 ... 관심이 있다면 다른 질문을 시작할 수 있습니다.
Melebius

1
@AleksandrMedvedev 훨씬 나중에 발견했습니다! 우분투 버전은 패키지에서 /etc/issue제공 하는 파일에 기록되어 base-files있습니다. 이미 작성했듯이 커널 버전과 관련이 없습니다.
Melebius

5

커널이 OS의 중요한 부분임을 알고 있듯이 GNU / Linux 배포판에서는 OS의 다른 부분을 건드리지 않고도 커널을 쉽게 업데이트 할 수 있습니다. 그러나 우리는 단순히 OS의 일부를 업데이트하고 있습니다.

운영 체제는 커널 공간과 사용자 공간의 두 부분으로 구성됩니다.

따라서 새 버전 만 현재 사용자 공간과 호환되는 경우 사용자 공간을 건드리지 않고 커널 공간을 업데이트 할 수 있습니다.

그리고 사용자 공간 도구 업데이트에 대해서는 또 다른 예입니다.

실행할 때 :

sudo apt-get upgrade

커널에 사용할 수있는 업데이트가 있으면 다음을 얻을 수 있습니다.

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

따라서 사용자 공간 만 업데이트하고 다음과 같은 것을 실행할 때

sudo apt-get dist-upgrade

커널을 포함한 모든 것을 업데이트하고 있습니다.

커널 만 최신 버전으로 업그레이드하려면 다음과 같이 사용하십시오.

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

최신 커널 목록을 찾으려면 새 커널로 설치하십시오 (예 :

sudo apt install linux-image-4.10.0-14-generic

이것은 사실이 아닙니다.
mook765

;)를 수정하여 새로운 것을 배우십시오 :)
Ravexina

3
sudo apt upgrade새 버전을 사용할 수있는 경우 커널도 업그레이드합니다. sudo apt full-upgradepackeges 엉덩이를 제거 asudo apt upgrade합니다.
Soren A

이제 새 커널로 업그레이드하는 것은 일종의 설치이며 upgrade하위 명령 을 사용하는 동안 새 패키지를 설치하지 않고 패키지를 제거하지 않으므로 우리가 사용하는 이유 dist-upgrade입니다. 적어도 apt-get이런 식으로 작동합니다;) 그래서 혼란을 피하기 위해 명령을 업데이트했습니다.
Ravexina

1
나는 apt-command에 더 많은 경험을 가지고 있으며 , 짧은 연구 후에 당신의 대답이 정확 apt하고 apt-get다르게 처리하는 것으로 보입니다. hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt - 명령 / ... . 그래서 우리 둘 다를위한 약간의 지식은 ...
mook765

3

우선, 몇 가지 설명이 있습니다. GNU / Linux 시스템이 어떻게 생겼는지 이해하지 못하기 때문입니다. 이것이 당신에게 새로운 것이 아니라면 나와 함께하십시오.

"Kernel"은 실행되는 다른 프로그램이 아니라 기본 기능을 제공하는 OS의 일부입니다. 프로그램을 시작하려면 (예 : 명령 줄에 "ls"를 입력) 바이너리를로드해야합니다. 디스크에서 (파일 시스템 조작을 찾고 파일 처리를위한 일부 파일 처리가 포함 된) 디스크에서 "프로세스 환경"이 작성됩니다. 메모리가 지정되고 프로세스 번호가 발행되는 등. (FS, 파일 읽기 ...)는 시스템 라이브러리에 의해 처리되지만 후자는 커널 함수입니다. 어떤 의미에서 커널은 "OS"이고 다른 모든 것들은 그 주위에 장식 일뿐입니다.

"Linux"는 실제로 OS의 다른 부분이없는 커널입니다. Linus Torvalds는 Andrew Tanenbaums MINIX 템플릿 OS 커널을 가져 와서 완성되고 실제 작업 가능한 커널이되도록 완성하여 작성하기 시작했습니다. 오늘날까지이 커널을 개발하는 Linus (및 기여한 많은 사람들)가 있습니다. 이 커널은 여전히 ​​UNIX와 매우 유사하지만 UNIX 커널은 아닙니다.

"GNU"는 많은 일반적인 UNIX 명령을 "더 좋게"만들기위한 이니셔티브로 시작되었습니다. 나는 그들이 성공했는지 아닌지는 논의하지 않을 것이지만, 분명히 많은 소프트웨어를 작성했으며 한 시점에 유틸리티 프로그램 모음이있었습니다. 그들은 심지어 UNIX를 기반으로했지만 분명히 다른 자체 OS 커널 (HURD)을 개발하기 시작했습니다. 그러나 현재까지 HURD는 초기 개발 단계에서 거의 작동하지 않습니다. "GNU"btw. "GNU (is) Not UNIX"의 줄임말-UNIX의 후속 버전을 만들려는 의도로 UNIX의 일부 (인식되거나 실제적인) 제한을 극복하려고 시도했습니다. 아닙니다-나는 그것이 "더 나은"것인지 "더 나쁜 것"인지 상관하지 않지만 확실히 다릅니다!).

따라서 커널이없는 도구 세트와 도구 세트가없는 커널로이 두 가지를 하나로 묶는 것이 자연스럽게 발전했습니다. GNU / Linux가 만들어졌습니다.

그래도 작동하고 작동 가능한 운영 체제를 갖추려면 커널과 도구 세트 이상이 필요합니다. 패키지 관리 시스템, 설치 절차, 템플릿 구성, 템플릿 구성이 필요합니다.

여러 사람들 (또는 그 그룹)이이 결론에 도달했고 GNU / Linux 조합을 사용하여 위에서 언급 한 내용을 정확하게 추가하여 원하는대로 GNU / Linux 시스템을 만들었습니다. 이들은 패키지 관리자, 패키징 시스템을 만들었습니다. 설치 절차 등 이러한 서로 다른 그룹 (각각 노력의 결과)은 서로 다른 분포입니다. 현재 세 가지 패키지 관리자가 있습니다 (데비안 및 * uuntu와 같은 파생 시스템, RedHat의 rpm 및 Fedora, CentOS 등의 파생 시스템, ArchLinux의 pacman과 같은 파생 시스템에 적합). 동일 : "ls"또는 "df"등을 발행 할 때 호출되는 것

따라서 "원칙적으로"위에서 언급 한 모든 소프트웨어의 다양한 버전에서 배포판을 만든 사람들처럼 커널 만 업데이트 할 수 있습니다.

그러나 이것은 매우 큰 문제입니다. 커널과 일부 추가 소프트웨어뿐만 아니라 시스템 구성 도구 (일부 배포판에서 사용하고 일부 배포판에서는 사용하지 않는 시스템 구성) 네트워크와 같이 명심해야 할 다른 많은 것들이 있기 때문에 그놈 라이브러리 등의 일부 버전에 따라 달라지는 NetworkManager와 같은 관리 도구- "배포"는 다소 복잡한 작업이며 커널을 업데이트하려고하면 많은 업데이트가 발생합니다. 많은 상호 의존성 때문에 다른 것들.

여전히 위와 같이 "원칙적으로": 모든 소스를 다운로드하여 컴파일하고, 버전 조합의 작업 세트를 찾거나, 일부 패키징 시스템을 설치하거나 (또는 ​​기존의 것 중 하나를 사용하여) 고유 한 배포판을 만들 수도 있습니다 )-배포 가능하고 설치 가능하며 구성 가능한 시스템이 될 때까지. 이것은 우분투와 같은 배포판 제작자가하는 일이며 기적이 아닙니다. 복잡한 작업이 많기 때문에 실제로 대부분의 사용자는 그것을 피하고 사용할 준비가되어있는 것을 사용합니다.

이것이 귀하의 질문에 답변되기를 바랍니다.


GNU는 많은 일반적인 UNIX 명령을 "더 좋게"만들기위한 이니셔티브로 시작하지 않았습니다. GNU는 독점적으로 독점적 인 UNIX에 대한 자유 소프트웨어의 목적으로 시작된 운영 체제였습니다. 당신은 그들의 웹 사이트 에서 더 많은 것을 읽을 수 있습니다 . 리눅스가 만들어 질 때까지 GNU에는 여전히 작동하는 커널이 없기 때문에 모든 소프트웨어를 리눅스로 포팅하기로 결정했습니다.
Ian Emnace

3

가장 간단한 대답은 우분투와 아무 관련이 없습니다. GNU / Linux의 빌드 방식과 관련이 있습니다. 시스템 개발자로 보려고하면 두 개의 세계가 뚜렷한 경계 (ABI)로 구분되어 있습니다.

저수준 개발자가 작업하는 커널 세계는 자체 시스템입니다. 일반적으로 일반 응용 프로그램에서 찾을 수있는 모든 것이 있습니다. 유일한 차이점은 사용자가 기계를 사용하는 실제 사람이 아니라 사용자 공간 세계라는 것입니다. 커널 "응용 프로그램"은 기계를 사용하는 서버 인 중개인입니다 (쉘의 유령).

이제 사용자 공간은 일상적인 사용자와 개발자가 즐기는 일반적인 세상입니다. 그것은 엄격한 API, 규칙, 파일 및 가장 중요한 것은 실행중인 컴퓨터의 추상적이며 유치한 이미지를 가지고 있습니다. 사용자는이 부분 만보고 있으며 이는 배포 크기의 99 %에 해당하므로 운영 체제 이름을 잘못 지정하기 쉽습니다. 올바른 명칭은 커널 (Linux, HURD, BSD 등)을 사용하여 일부 엔티티 (Canonical, Fedora 등)에서 작성하고 일련의 도구 (보통 GNU에서 제공)를 사용하여 빌드 한 소프트웨어 배포판입니다. ).

GNU / Linux (Windows 및 OSX와 마찬가지로)에서 질문에 답하기 위해 버전뿐만 아니라 전체 아키텍처 (Linux Kernel, HURD Kernel)뿐만 아니라 커널을 변경할 수 있습니다. ABI는 건드리지 않고, 사용자 세계에서 절대로 하나의 변화를 만들지 않습니다 ... 그 날, 진짜 사람이 소스에서 커널을 만들어야했을 때, 다음과 같은 몇 가지 변화를 겪어 엉뚱한 USB 웹캠을 얻을 수있었습니다. 작동합니다 ... 이제 모듈 식 커널을 사용하면 모듈을 설치하기 만하면 새로운 기능으로 확장 된 ABI (때로는)로 새로운 커널 세계를 얻게됩니다 ...

다시, 사용자 공간과 동일합니다. 99 %의 시간 인 Ubuntu 리포지토리에서 새 응용 프로그램을 설치할 때 가장 큰 관심사는 실제 커널이 아닌 다른 사용자 공간 구성 요소의 호환성입니다. 커널 버전이 ABI를 통해 사용자 공간에 설치할 수있는 범위를 지시하는 경우가 있지만 목표는 (적어도 개발자에게는) 이것을 멀리하는 것입니다 ...

숙고해야 할 또 다른 사항은 고유하고 특별한 독창적 인 GNU / Linux 배포판을 만들 수 있다는 것입니다. 커널, 간단한 스크립트, 여러 앱을 얻으면 설정이 완료됩니다. 네트워크 장비에 대해서는 OpenWRT GNU / Linux 배포판을 보시고 전체 배포판이 16Mb 정도에 해당하는지 확인하십시오.


"예리한 경계 (ABI)." 나는 당신이 API를 의미한다고 생각합니다. ABI는 더 나은 용어가 없기 때문에 하드웨어 인터페이스에 대한 코드입니다. 반면에 API는 코드 간 인터페이스입니다.
Sam

1

커널이 중요한 부분이기 때문에 그것들이 별도로 유지되는 것 같습니다. 회귀가 있거나 커널이 실패한 커널은 많은 피해를 줄 수 있습니다. 덜 자주 업데이트 할 수 있습니다. 또는 시간을 기다린 후에 만 ​​아무도 걱정하는 버그를보고하지 않도록해야합니다.

또한 일부 고급 또는 전문 사용자는 커널을 다시 컴파일하여 필요에 맞게 동작을 수정합니다. 이 경우 업그레이드 할 때마다 팩토리 버전으로 자동 교체되는 것을 원하지 않을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.