유닉스 나 리눅스 시스템은 어떻게 작동합니까? [닫은]


37

간단히 말해서 OS가 어떻게 작동하는지 알고 싶습니다 .

  • 기본 구성 요소
  • 이러한 구성 요소가 함께 작동하는 방법
  • 유닉스 유닉스를 만드는 것
  • Windows와 같은 다른 OS와 다른 점

3
와우이 질문은 여러 권의 책처럼 포괄적으로 대답하기까지 시간이 오래 걸릴 것입니다 유닉스가 아닌 OS (임베디드 스페이스를 제외하고 창을 눈에 띄는 예외)는 거의 없습니다.
xenoterracide

2
울거나 웃을 지 확실하지 않음
zvolkov

27
유닉스 나 리눅스 시스템은 어떻게 작동합니까? 정말 감사합니다 :-).
Gaurav

3
질문을 사랑하십시오. 숙련 된 사용자가 자신의 이해를 구두로 표현하고 유닉스와 리눅스의 세계를 이해할 수있는 기회를 제공합니다.
Stein Åsmul

5
사실, 간단히 말해서, 당신은 쉘을 가지고 있으며 그 아래에는 커널이 있습니다. 이것이 유닉스의 작동 방식이기도합니다.
Tom Zych

답변:


74

UNIX 시스템은 여러 부분 또는 계층으로 구성되어 있습니다.

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

레이어링

  1. 커널. 이것은 부트 로더에 의해 시작되는 중앙 프로그램입니다. 시스템의 기본 하드웨어 상호 작용 (디스크, 메모리, 비디오, 사운드)을 수행하고 프로그램을 시작할 수있는 가상 환경을 제공합니다. 커널은 또한 하드웨어 장치 사이의 모든 작은 차이점을 다루는 모든 드라이버를 제공합니다. 외부 세계 (상위 계층)에서는 각 장치 클래스가 정확히 동일한 일관된 방식으로 작동하여 프로그램을 구축 할 수 있습니다.

  2. 백그라운드 서브 시스템. 정기적 인 프로그램 만 있으면됩니다. 이들은 원격 로그인과 같은 것을 처리하고, 센트 메시지 버스를 제공하며 하드웨어 / 네트워크 이벤트를 기반으로 조치를 수행합니다. 예를 들어, Bluetooth 검색, wifi 관리 등. 모든 네트워크 서비스 (파일 서버, 프린트 서버, 웹 서버)도이 수준에 있습니다. UNIX 시스템에서 이들은 모두 정상적인 프로그램입니다.

  3. 명령 줄 도구 이들은 모두 텍스트 편집, 파일 다운로드 또는 시스템 관리와 ​​같은 작업을 시작할 수있는 작은 프로그램입니다. 이 시점에서 UNIX 시스템은 시스템 관리자가 사용할 수 있습니다. Windows에서는이 계층이 더 이상 존재하지 않습니다.

  4. 그래픽 사용자 인터페이스. 이것들은 또한 프로그램 일뿐입니다. 단지 차이점은 텍스트를 쓰는 대신 화면에서 창을 그리는 것입니다. 이를 통해 일반 사용자가 시스템을보다 쉽게 ​​사용할 수 있습니다.

모든 서비스 또는 이벤트는 하단에서 상단으로 진행됩니다.

라이브러리-공통 플랫폼

프로그램은 창 표시, 화면에 물건 그리기 또는 파일 다운로드와 같은 많은 공통적 인 작업을 수행합니다. 이러한 것들은 여러 프로그램에서 동일하므로 코드는 별도의 "라이브러리"파일 ( .so파일-공유 객체를 의미)에 저장됩니다. 라이브러리는 모든 프로그램에서 공유 할 수 있습니다.

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

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

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

일부 라이브러리는 다른 운영 체제 (예 : Qt)에서 사용될 수 있으며, 일부 라이브러리는 실제로 하나의 운영 체제에 연결되어 있습니다. 이렇게하면 해당 플랫폼에서만 프로그램을 실행할 수 있습니다.

프로세스 간 통신

운영 체제의 세 번째 코너는 프로그램이 서로 통신 할 수있는 방법입니다. 이는 IPC (Inter Process Communication) 메커니즘입니다. 이것들은 여러 가지 형태로 존재합니다. 예를 들어 공유 메모리 조각이거나 작은 채널이 두 프로그램 사이에 설정되어 데이터를 교환합니다. 각 프로그램이 메시지를 게시하고 응답을받을 수있는 중앙 메시지 버스도 있습니다. 어떤 프로그램이 응답 할 수 있는지 알 수없는 전역 통신에 사용됩니다.

라이브러리에서 운영 체제로

라이브러리, 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(). 새로운 프로그램은 기존 프로그램 복제 자체에 의해 시작됩니다. 클론은 모든 것을 설정하고 (예 : 파일 핸들) 선택적으로 새로운 프로그램 코드로 대체합니다. 이를 통해 새로운 프로그램에 동일한 보안 설정 및 제한 사항을 적용하거나 메모리를 공유하거나 IPC 메커니즘을 설정할 수 있습니다. 프로세스 시작 비용도 매우 낮습니다.

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

  • 이 시스템은 낮은 사용자 권한을 위해 만들어졌습니다. 로그인 후 모든 사용자 (루트 제외)는 응용 프로그램 및 파일 만 실행하는 자체 리소스로 제한됩니다. 네트워크 서비스는 가능한 빨리 권한을 줄입니다. 더 많은 권한을 얻거나 다른 사람이 자신을 대신하여 권한있는 작업을 실행하도록 요청하는 명확한 방법이 있습니다. 다른 모든 통화는 프로그램의 제한 사항에 의해 제한됩니다.

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

  • 비밀 메커니즘 또는 특정 일대일 메커니즘보다 공개적으로 설명 된 통신 메커니즘에 대한 호의. 다른 공급 업체와 소프트웨어 개발자는 동일한 사양을 따르도록 권장되므로 사물을 쉽게 연결하고 교체하고 느슨하게 연결할 수 있습니다.


1
사랑스러운 대답, 나는 짧게 설명하기가 정말 어렵다는 것을 알고 있습니다! 감사! ;-)
샌더 Versluys 9

1
예,이 답변을 잘 끝냈습니다.
Stefan

14
+10 버튼은 어디에 있습니까?
EricSchaefer

1
의견과 투표에 감사드립니다! 답변을 잘 알고 있으면 좋겠습니다.
vdboor

1
@faif, 그것은 매우 표준이며 (Microsoft 운영 체제조차도), 아름다움은 내가 생각하는 보는 사람의 눈에 있습니다. 요점은 모든 것이 파일이며 심지어 특별한 파일이라는 것입니다.
psusi

11

UNIX는 강력한 OS이며 40 년 이상 성공한 것으로 입증 된 사운드 디자인 (컴퓨터 과학 분야에서 거의 영원)으로 구축되었습니다. 중앙 기술은 C 언어와 수많은 작은 프로그램 인 UNIX 명령을 기반으로합니다. 기본 철학은 McIlroy에 의해 요약되었습니다.

한 가지 일을 잘 수행하는 프로그램을 작성하십시오. 함께 일할 프로그램을 작성하십시오. 범용 인터페이스이기 때문에 텍스트 스트림을 처리하는 프로그램을 작성하십시오.

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


2
"UNIX 프로그래밍 기술"+1 그러나 API가 C 주위에 정의되어 있지만 Haskell에서 전체 시스템을 구현하는 데는 기술적 인 문제가 없습니다 (조립 비트가있는;) 또는 이와 유사한 것.
Maciej Piechotka

3
어셈블리 비트도 Haskell로 작성할 수 있습니다. 잠재력을
Phil Miller

10

여기에 훌륭한 답변이 있습니다. 그러나 내가 생각하지 않은 것 중 하나는 * nix가 다른 운영 체제, 특히 Microsoft Windows와 어떻게 다른지입니다.

위에서 언급 한 "한 가지 일을 잘해라"는 기본 개념은 * nix 운영 체제의 중심에 있기 때문에 간과 될 수 있습니다. 그러나이 디자인 철학은 Linux를 매우 유연하고 강력하게 만듭니다.

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

Linux의 모듈 식 설계를 통해 시스템 관리자는 운영 체제를 재부팅하지 않고도 서비스를 중단하고 업그레이드 한 후 다시 가동 할 수 있습니다. 실제로 Linux 운영 체제를 재부팅해야하는 경우는 커널 자체를 수정하거나 업그레이드 할 때뿐입니다.

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

Windows에서는 종종 시스템을 가장 간단하게 변경하기 위해 재부팅해야하지만 때로는 실제 기술 요구 사항보다 안전 문제가 더 많습니다. 나는 이것이 MS 운영 체제의 기본 결함 중 하나라고 주장합니다. Linux에서는 많은 드라이버 모듈을 업그레이드 할 수 있으며 사용자에게 거의 영향을 미치지 않습니다. Windows에서는 단순히 새 응용 프로그램을 설치하는 경우 전체 상자를 재부팅해야 할 수도 있습니다.

이 모듈 식 디자인은 Linux에 뛰어난 유연성을 제공합니다. 각 Linux 시스템은 가능한 적은 리소스 오버 헤드로 수행해야하는 특정 작업에 맞게 조정할 수 있습니다. Windows에서는 간단한 HTTP 서버를 실행하기 위해 GUI 인터페이스를 끌 수 없습니다. Windows가 가정하는 메모리 풋 프린트가 있는데, 그 아래로 하드웨어가 갈 수없는 장벽을 만듭니다. 이것이 리눅스가 많은 모바일 및 임베디드 응용 프로그램에서 선택되는 OS가 된 주요 이유입니다.

나는 계속해서 갈 수는 있지만,이 예제들이 왜 리눅스가 인기를 얻었는지, 그리고 다른 OS와 어떻게 다른지 설명하는 데 도움이되기를 바랍니다.



2

Unix Environment 2e에서 Advanced Programming을 읽고 Single Unix Standard (SUS) API 및 POSIX에 대해 많이 배우면 Unix Unix의 구성 요소와 구성 요소의 작동 방식 및 작동 방식에 대한 아이디어를 얻을 수 있습니다.

그러나 매우 무거운 책이자 참고 설명서입니다. 당신이 불면증에 문제가 있으면 그냥 당신과 함께 침대에 가져 가라. 당신이 유닉스 C 프로그래머라면 그것을 제외하고는 반드시 있어야합니다.


2

앞의 두 권의 책을 추천합니다.

M. Kerrisk 의 LINUX 프로그래밍 인터페이스

유닉스 / 리눅스 시스템 프로그래밍 주제를 대상으로하고 있지만, 리눅스와보다 일반적으로 유닉스 시스템이 프로그래머 / 사용자 관점에서 어떻게 작동하는지에 대한 자세한 정보가 많이 나와 있습니다. vdboor의 답변에 언급 된 대부분의 글 머리 기호를 자세히 살펴보고 기본 UNIX 개념과 그 토대에 대한 느낌 / 그림을 얻기 위해 이해할 수 있고 읽을 수있는 방식으로 충분한 세부 사항을 보여줍니다.

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