Unix나 Linux 시스템은 어떻게 작동하나요? [폐쇄]

Unix나 Linux 시스템은 어떻게 작동하나요? [폐쇄]

운영체제가 어떻게 작동하는지 알고 싶습니다.요컨대:

  • 기본 구성 요소는 기본 구성 요소입니다.
  • 이러한 구성 요소가 함께 작동하는 방식
  • UNIX를 UNIX로 만드는 이유
  • Windows 등 다른 운영 체제와 다른 점

답변1

UNIX 시스템은 여러 부분, 즉 제가 부르는 "계층"으로 구성됩니다.

시스템을 부팅하기 위해 부트로더라는 프로그램이 하드 디스크 파티션의 첫 번째 섹터에 위치합니다. 이는 시스템에 의해 시작된 다음 운영 체제 커널을 찾아서 로드합니다.

계층화 된

  1. 핵심. 이것은 부트로더에 의해 시작되는 중앙 프로그램입니다. 이는 시스템에 대한 기본 하드웨어 상호 작용(디스크, 메모리, 비디오, 사운드)을 제공하고 프로그램을 시작할 수 있는 가상 환경을 제공합니다. 커널은 또한 하드웨어 장치 간의 모든 미묘한 차이점을 처리하는 모든 드라이버를 제공합니다. 외부 세계(상위 계층)에는 각 유형의 장치가 정확히 동일하게 작동하는 것처럼 보이며, 결과적으로 이 기반으로 프로그램을 구축할 수 있습니다.

  2. 백엔드 하위 시스템. 그냥 규칙적인 일상이니 방해할 것이 없습니다. 원격 로그인과 같은 작업을 처리하고 중앙 메시지 버스를 제공하며 하드웨어/네트워크 이벤트를 기반으로 작업을 수행합니다. 예를 들어 Bluetooth 검색, Wi-Fi 관리 등이 있습니다. 모든 네트워크 서비스(파일 서버, 인쇄 서버, 웹 서버)도 이 수준에 있습니다. UNIX 시스템에서는 이는 단지 일반 프로그램일 뿐입니다.

  3. 명령줄 도구. 이는 텍스트 편집, 파일 다운로드 또는 시스템 관리와 ​​같은 작업을 수행하기 위해 시작할 수 있는 작은 프로그램입니다. 이제 시스템 관리자가 UNIX 시스템을 사용할 준비가 완전히 완료된 것입니다. Windows에서는 이 레이어가 사실상 더 이상 존재하지 않습니다.

  4. GUI. 이것들도 단지 프로그램일 뿐이며, 유일한 차이점은 텍스트를 쓰는 대신 화면에 창을 그린다는 것입니다. 이를 통해 일반 사용자가 시스템을 더 쉽게 사용할 수 있습니다.

모든 서비스나 활동은 아래에서 위로 이루어집니다.

도서관 - 공공 플랫폼

프로그램은 창 표시, 화면에 콘텐츠 그리기, 파일 다운로드 등 다양한 일반적인 작업을 수행합니다. 이러한 사항은 여러 프로그램에서 동일하므로 코드는 별도의 "라이브러리" 파일( .so파일 - 공유 개체를 의미)에 배치됩니다. 이 라이브러리는 모든 프로그램 간에 공유될 수 있습니다.

상상할 수 있는 모든 것을 위한 라이브러리가 있습니다. PNG 파일을 읽고 쓰는 방법이 있습니다. JPEG 파일용, XML 읽기용, 암호화용, 비디오 재생용 등이 있습니다.

Linux에서 애플리케이션 개발자를 위한 공통 라이브러리는 Qt 및 Gtk입니다. 이러한 라이브러리는 특정 요구 사항을 충족하기 위해 내부적으로 하위 수준 라이브러리를 사용하는 동시에 응용 프로그램 개발자가 응용 프로그램을 더 빠르게 만들 수 있도록 일관되고 간결한 방식으로 해당 기능을 노출합니다.

라이브러리는 프로그래머가 운영 체제용 최종 사용자 애플리케이션을 구축할 수 있는 애플리케이션 플랫폼을 제공합니다. 시스템이 제공하는 고품질 라이브러리가 많을수록 프로그래머가 아름다운 프로그램을 작성하기 위해 작성해야 하는 코드가 줄어듭니다.

일부 라이브러리는 다양한 운영 체제(예: Qt)에서 사용할 수 있으며 일부 라이브러리는 실제로 특정 운영 체제와 연결되어 있습니다. 이렇게 하면 프로그램이 해당 플랫폼에서만 실행되도록 제한됩니다.

프로세스 간 통신

운영 체제의 세 번째 모서리는 프로그램이 서로 통신하는 방식입니다. 이는 프로세스 간 통신(IPC) 메커니즘입니다. 공유 메모리 조각이나 데이터를 교환하기 위한 두 프로그램 간의 작은 채널 등 다양한 형태로 존재합니다. 각 프로그램이 메시지를 게시하고 응답을 받을 수 있는 중앙 메시지 버스도 있습니다. 이는 어떤 프로그램이 응답할 수 있는지 알 수 없는 전역 통신에 사용됩니다.

라이브러리에서 운영 체제까지

프로그래머는 라이브러리, IPC 및 커널을 사용하여 시스템 서비스, 사용자 관리, 구성, 관리, 사무실, 엔터테인먼트 등을 위한 다양한 애플리케이션을 구축할 수 있습니다. 이로 인해 초보 사용자가 "운영 체제"로 인식할 수 있는 완전한 제품군이 탄생합니다. ".

UNIX/Linux 시스템에서 모든 서비스는 단지 프로그램일 뿐입니다. 모든 시스템 관리 도구는 단지 프로그램일 뿐입니다. 그들은 모두 자신의 역할을 가지고 있으며 함께 묶일 수 있습니다. 여러 주요 절차를 정리해봤습니다http://codingdomain.com/linux/sysadmin/


Windows와 구별 가능한 부분

UNIX는 기본적으로 프로그램, 파일 및 제한된 권한으로 구성된 시스템입니다. 많은 복잡성을 피하여 쉽게 보이면서도 강력한 시스템을 만들 수 있습니다.

특히 이러한 원칙은 UNIX/Linux 시스템에서 찾을 수 있습니다.

  • 정보에 접근하는 통일된 방법이 있습니다. ("모든 것은 단지 파일일 뿐이다"). 파일, 네트워크 소켓, IPC 채널, 커널 매개변수 및 블록 장치를 파일로 열 수 있습니다. 따라서 가상 파일 시스템은 /dev, /sys 및 /proc에 나타납니다. 필요한 API는 open, read및 뿐입니다 close.

  • 기본 시스템은 투명합니다. 모든 프로그램은 동일한 규칙에 따라 작동합니다. Windows와 달리 "콘솔 프로그램", "GUI 프로그램" 또는 "백그라운드 서비스" 간에 인위적인 구분이 없습니다. 그것들은 모두 우연히 다른 일을 하는 프로그램일 뿐입니다. 또한 모두 동일한 방식으로 관찰, 분석 및 디버깅할 수 있습니다.

  • 설정을 읽고 편집할 수 있으며 설명으로 주석을 달 수 있습니다. 일반적으로 INI 스타일 형식을 사용하지만 응용 프로그램의 필요에 따라 사용자 정의 형식을 사용할 수 있습니다. 이는 단순한 파일이기 때문에 표준 도구를 사용하여 다른 시스템, 아카이브 또는 백업으로 복사할 수 있습니다.

  • "한 번에 모든 작업을 수행"하는 대규모 애플리케이션은 없습니다. 만트라는 "뭔가를 하라, 잘하라"이다. 명령줄 도구는 서로 연결될 수 있으며 강력합니다. 개별 서비스(예: SMTP, IMAP, POP 및 로그인)는 별도의 서브루틴이므로 복잡하게 얽힌 코드 및 보안 문제를 피할 수 있습니다. 복잡한 데스크탑 환경에서는 무거운 작업을 개별 프로그램에 위임합니다.

  • fork(). 기존 프로그램을 복제하여 새로운 프로그램이 시작됩니다. Clone은 모든 것(예: 파일 핸들)을 설정하고 선택적으로 자신을 새 프로그램 코드로 대체합니다. 이를 통해 새 프로그램, 공유 메모리 또는 IPC 메커니즘 설정에 동일한 보안 설정 및 제한 사항을 매우 쉽게 적용할 수 있습니다. 프로세스를 시작하는 데 드는 비용도 매우 낮습니다.

  • 파일 시스템은 다른 디스크 파티션과 네트워크 공유를 마운트할 수 있는 트리입니다. 이는 다시 데이터에 액세스하는 일반적인 방법입니다. 공통 시스템 위치(예: /usr네트워크 공유로 쉽게 마운트 가능)

  • 시스템은 낮은 사용자 권한을 위해 구축되었습니다. 일단 로그인하면 각 사용자(루트 제외)는 자신의 리소스로 제한되며 응용 프로그램과 파일만 실행할 수 있습니다. 네트워크 서비스는 가능한 한 빨리 권한을 줄입니다. 더 많은 권한을 얻거나 다른 사람에게 자신을 대신하여 권한 있는 작업을 수행하도록 요청하는 명확한 방법이 있습니다. 다른 모든 호출에는 프로그램 제한 사항이 적용됩니다.

  • 모든 프로그램은 사용자 홈 디렉터리의 숨겨진 파일/폴더에 설정을 저장합니다. 어떤 프로그램도 전역 설정 파일에 쓰려고 시도하지 않습니다.

  • 비밀 메커니즘이나 특정 일대일 메커니즘보다 공개적으로 설명된 통신 메커니즘을 선호합니다. 다른 공급업체와 소프트웨어 개발자는 쉽게 연결하고, 교환하고, 느슨하게 결합된 상태를 유지할 수 있도록 동일한 사양을 따르는 것이 좋습니다.

답변2

UNIX는 40년(컴퓨터 과학에서는 거의 영원)에 걸쳐 검증되고 성공적인 설계를 바탕으로 구축된 강력한 운영 체제입니다. 핵심 기술은 C 언어와 수많은 작은 프로그램인 UNIX 명령을 기반으로 합니다. McIlroy는 기본 아이디어를 다음과 같이 요약했습니다.

한 가지 일을 잘 수행하는 프로그램을 작성하세요. 함께 작동하는 프로그램을 작성하세요. 이는 일반적인 인터페이스이므로 텍스트 스트림을 처리하는 프로그램을 작성하십시오.

UNIX 철학에 대한 자세한 내용은 ESRaymond "The Art of UNIX 프로그래밍"에서 찾을 수 있습니다.

답변3

여기에 좋은 답변이 있습니다. 그러나 한 가지 간과된 점은 *nix가 다른 운영 체제, 특히 Microsoft Windows와 어떻게 다른지입니다.

위에서 다룬 "뭔가를 해라, 잘해라"라는 기본 개념은 *nix 운영체제에 너무 중요해서 가끔 간과되기도 합니다. 그러나 Linux를 그토록 유연하고 강력하게 만드는 것은 바로 이러한 설계 철학입니다.

예를 들어, MS Windows의 그래픽 사용자 인터페이스(GUI)는 운영 체제와 얽혀 있습니다. GUI가 없으면 MS 운영체제를 설치하는 것이 거의 불가능합니다. Linux에서는 그래픽 구성 요소가 전혀 없이 서버나 임베디드 시스템을 쉽게 시작할 수 있습니다. 명령줄에서 전적으로 구동할 수 있으며 여전히 완전한 기능을 갖춘 서버입니다.

또한 Linux의 모듈식 설계를 통해 시스템 관리자는 운영 체제를 다시 시작하지 않고도 서비스를 종료하고, 서비스를 업그레이드하고, 서비스를 복원할 수 있습니다. 실제로 커널 자체가 수정되거나 업그레이드되는 경우에만 Linux 운영 체제를 재부팅하면 됩니다.

예를 들어, Linux에 새로운 Windows 관리자(gnome, kde 등)를 설치할 수 있으며 현재 시스템에 로그인한 사용자는 이를 전혀 알 수 없습니다.

Windows에서는 시스템에 대한 가장 간단한 변경을 수행하려면 재부팅이 필요한 경우가 많지만 때로는 이것이 실제 기술 요구 사항보다 보안 문제에 더 가깝습니다. 나는 이것이 Microsoft 운영 체제의 근본적인 결함 중 하나라고 생각합니다. Linux에서는 사용자에게 거의 또는 전혀 영향을 주지 않고 많은 드라이버 모듈을 업그레이드할 수 있습니다. Windows에서 새 애플리케이션을 설치하는 경우 전체 장치를 다시 시작해야 할 수도 있습니다.

이 모듈식 설계는 또한 Linux에 탁월한 유연성을 제공합니다. 모든 Linux 시스템은 가능한 한 적은 리소스 오버헤드로 수행해야 하는 특정 작업에 맞게 사용자 정의할 수 있습니다. Windows에서는 간단한 HTTP 서버를 실행하기 위해 GUI 인터페이스를 닫을 수 없습니다. Windows는 메모리 공간을 가정하므로 하드웨어가 그 이하로 내려갈 수 없는 장벽을 만듭니다. 이것이 Linux가 많은 모바일 및 임베디드 애플리케이션에서 운영 체제로 선택되는 주된 이유입니다.

계속할 수도 있지만, 이 예제가 Linux가 왜 그토록 인기를 얻었는지, 그리고 Linux가 다른 운영 체제와 어떻게 다른지 설명하는 데 도움이 되기를 바랍니다.

답변4

나는 독서를 추천한다Unix 환경의 고급 프로그래밍 2eSUS(Single Unix Standard) API와 POSIX에 대해 많이 알아보세요. 이를 통해 Unix가 무엇으로 구성되어 있는지, 구성 요소가 어떻게 작동하고 함께 작동하는지 이해할 수 있습니다.

그러나 이 책은 C가 많은 책이자 참조 매뉴얼에 가깝습니다. 불면증으로 인해 어려움을 겪고 있다면 잠자리에 들도록 하세요. 그 외에도 Unix C 프로그래머라면 필수품입니다.

관련 정보