>  기사  >  운영 및 유지보수  >  uclinux와 리눅스의 차이점은 무엇입니까

uclinux와 리눅스의 차이점은 무엇입니까

WBOY
WBOY원래의
2022-05-17 11:02:504085검색

차이점: 1. Uclinux는 메모리 페이징 관리를 사용하는 반면, Linux는 가상 메모리 관리를 사용합니다. 2. Uclinux는 포크 시스템 호출이 없고 vfork를 사용하는 반면, Linux는 포크 시스템 호출을 사용합니다. 3. Uclinux는 프로세스 스택을 추가할 수 없습니다. 실행 시 Linux는 런타임 시 프로세스 스택을 늘릴 수 있습니다.

uclinux와 리눅스의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.

uclinux와 linux의 차이점은 무엇인가요

uClinux에서 u는 작다는 뜻의 Micro를 의미하고, C는 제어를 의미하는 Control을 의미합니다.

그래서 uClinux는 문자 그대로 "Micro-Control-Linux"를 의미합니다. 마이크로컨트롤 분야를 위해 설계된 Linux 시스템입니다."

ucLinux와 linux의 차이점

  • 가상 메모리 관리 없음

  • 실행 중 프로세스 스택을 늘릴 수 없음

  • 페이징을 지원하지 않음

  • 실행 프로그램은 elf가 아니라 플랫입니다.

  • fork는 사용할 수 없으나 vfork를 사용하세요

  • RAMDISK

uClinux는 Linux 2.0/2.4 커널에서 파생되었으며 대부분의 기능을 상속받은 제어 분야용 Linux 운영체제입니다. 주류 리눅스.

MMU(메모리 관리 장치)가 없는 마이크로프로세서/마이크로컨트롤러에 적합합니다. MMU 지원 부족은 uClinux와 주류 Linux의 근본적인 차이점입니다.

uCLinux의 경우 MMU가 없는 프로세서용으로 설계되었으며 프로세서의 가상 메모리 관리 기술을 사용할 수 없습니다. uCLinux는 여전히 메모리 페이징 관리를 사용하며 시스템은 시작 시 실제 메모리를 페이징합니다. 응용 프로그램이 로드되는 동안 프로그램이 페이지 단위로 로드됩니다. 그러나 MMU 관리가 없기 때문에 uCLinux는 실제로 실제 메모리 관리 전략을 채택합니다.

uCLinux 시스템은 메모리에 직접 접근할 수 있으며, 모든 프로그램에서 접근하는 주소는 실제 물리적 주소입니다. 운영 체제는 메모리 공간을 보호하지 않으며 각 프로세스는 실제로 실행 공간을 공유합니다. 프로세스가 실행되기 전에 시스템은 프로세스에 충분한 연속 주소 공간을 할당한 다음 이를 모두 주 메모리의 연속 공간에 로드해야 합니다.

메모리 보호가 없는 작업(메모리 보호)은 다음과 같은 결과를 가져옵니다.

권한이 없는 프로세스에서 잘못된 포인터를 호출하더라도 주소 오류가 발생하여 잠재적으로 프로그램이 중단되거나 심지어 오류가 발생할 수 있습니다. 시스템이 중단됩니다. 분명히 그러한 시스템에서 실행되는 코드는 견고성과 보안을 보장하기 위해 신중하게 프로그래밍되고 철저하게 테스트되어야 합니다.

일반 Linux의 경우 다양한 사용자 프로그램을 실행해야 합니다. 메모리 보호가 없으면 시스템의 보안과 안정성이 크게 저하됩니다. 그러나 임베디드 uClinux 시스템의 경우 실행되는 프로그램이 공장에서 배송되는 경우가 많습니다. 응용 프로그램이 이전에 견고해졌기 때문에 시스템 보안을 위협하는 프로그램에 의한 침입의 숨겨진 위험이 없습니다. 따라서 응용 프로그램이 상대적으로 완전한 테스트를 거친 한 제한된 범위 내에서 문제 발생 가능성을 제어할 수 있습니다.

가상 메모리 없음(가상 메모리)은 주로 다음과 같은 결과를 초래합니다.

우선 커널에 의해 로드된 프로세스는 메모리 위치에 관계없이 독립적으로 실행될 수 있어야 합니다. 이 목표를 달성하는 첫 번째 방법은 프로그램이 RAM에 로드된 후 프로그램의 기본 주소를 "수정"하는 것입니다. 또 다른 방법은 상대 주소 지정("위치 독립적 코드"라고 함)만 사용하는 코드를 생성하는 것입니다. 사진). uClinux는 두 가지 모드를 모두 지원합니다.

둘째, 플랫 메모리 모델의 메모리 할당 및 해제 문제를 해결해야 합니다. 매우 동적인 메모리 할당은 메모리 조각화를 유발할 수 있으며 시스템 리소스를 고갈시킬 수 있습니다. 동적 메모리 할당을 사용하는 애플리케이션의 경우 견고성을 높이는 한 가지 방법은 malloc() 호출을 미리 할당된 버퍼 풀로 바꾸는 것입니다.

uclinux에서는 가상 메모리를 사용하지 않기 때문에 페이지가 RAM의 동일한 위치에 로드된다는 보장이 없기 때문에 메모리 안팎으로 페이지 스와핑이 구현되지 않습니다. 일반 컴퓨터에서 운영 체제는 응용 프로그램이 물리적 메모리(RAM)보다 더 큰 메모리 공간을 사용할 수 있도록 허용하며, 이는 종종 하드 디스크에 스왑 파티션을 설정하여 달성됩니다. 그러나 임베디드 시스템에서는 하드디스크 대신 FLASH 메모리를 사용하는 경우가 많아 메모리 페이지 스왑 액세스를 효율적으로 구현하기 어렵기 때문에 실행 중인 애플리케이션에 할당할 수 있는 공간은 시스템의 RAM 공간 이하로 제한된다.

멀티태스킹은 영향을 받지 않습니다. fork()를 널리 사용하는 오래된 네트워크 데몬을 수정해야 합니다. 하위 프로세스는 상위 프로세스와 동일한 주소 공간에서 실행되므로 경우에 따라 두 프로세스의 동작을 수정해야 할 수도 있습니다.

많은 최신 프로그램은 기본 작업을 수행하기 위해 하위 프로세스에 의존하므로 프로세스가 과도하게 로드되는 경우에도 시스템이 "대화형" 상태로 유지될 수 있습니다. 이러한 프로그램은 uClinux에서 동일한 작업을 수행하기 위해 상당한 수정이 필요할 수 있습니다. 중요한 애플리케이션이 이러한 구조에 크게 의존하는 경우 다시 작성해야 합니다.

fork()를 광범위하게 사용하는 간단한 네트워크 데몬이 있다고 가정합니다. 이 데몬은 잘 알려진 포트(또는 소켓)에서 수신 대기하고 네트워크 클라이언트가 연결될 때까지 기다립니다. 클라이언트가 연결되면 데몬은 클라이언트에게 새로운 연결 정보(새 소켓 번호)를 제공하고 fork()를 호출합니다. 그런 다음 하위 프로세스는 새 소켓의 클라이언트에 연결되고 상위 프로세스는 해제되어 계속해서 새 연결을 수신할 수 있습니다.

uClinux에는 자동으로 증가하는 스택이나 brk() 함수가 없으므로 사용자 공간 프로그램은 메모리를 할당하기 위해 mmap() 명령을 사용해야 합니다. 편의상 uclinux의 C 언어 라이브러리에 구현된 malloc()은 기본적으로 mmap()입니다. 컴파일 타임에 프로그램의 스택 크기를 지정할 수 있습니다.

마지막으로, uClinux 타겟 보드 프로세서에는 메모리 관리 하드웨어 장치가 부족하여 Linux 시스템 인터페이스에 일부 변경이 필요합니다. 아마도 가장 큰 차이점은 fork() 및 brk() 시스템 호출이 없다는 점일 것입니다. fork()를 호출하면 프로세스가 복사되어 자식 프로세스가 생성됩니다. Linux에서 fork()는 쓰기 시 복사 페이지를 사용하여 구현됩니다. MMU가 없기 때문에 Uclinux는 프로세스를 완전하고 재현 가능하게 복사할 수 없으며 쓰기 중 복사에 대한 액세스도 없습니다. 이러한 단점을 보완하기 위해 uClinux는 vfork()를 구현합니다. 상위 프로세스가 하위 프로세스를 생성하기 위해 vfork()를 호출하면 두 프로세스는 스택을 포함한 전체 메모리 공간을 공유합니다. 자식 프로세스는 자식 프로세스가 종료하기 위해 exitI()를 호출할 때까지 부모 프로세스 대신 실행되거나(부모 프로세스는 현재 이미 휴면 상태임) 실행 파일이 실행되는 새 프로세스를 실행하기 위해 exec()를 호출합니다. 로드됩니다. 프로세스가 상위 프로세스의 복사본일 뿐이라고 해도 이 프로세스는 피할 수 없습니다. 자식 프로세스가 exit() 또는 exec()를 실행하면 자식 프로세스는 wakeup을 사용하여 부모 프로세스를 깨우고 부모 프로세스는 실행을 계속합니다.

일반 아키텍처의 커널 변경 사항:

uCLinux 릴리스에서 /linux/mmnommu 디렉토리는 /linux/mm 디렉토리를 대체했으며 전자는 MMU의 하드웨어 종속성을 제거하고 다음을 추가한 수정된 메모리 관리 하위 시스템입니다. 커널 소프트웨어 자체는 기본적인 내부 관리 기능을 제공합니다.

많은 하위 시스템을 수정, 추가 또는 다시 작성해야 하며 커널 및 사용자 메모리 할당 및 해제 프로세스를 다시 구현해야 하며 커널에서 투명한 상호 작용/페이징에 대한 지원도 제거됩니다. "PIC(커널 독립 코드)"를 지원하는 프로그램 지원 모듈을 추가하고 플랫 형식이라는 새로운 바이너리 개체 코드 형식을 사용하여 PIC(매우 컴팩트한 헤더 포함)를 지원합니다.

커널은 ELF 형식도 지원합니다. 고정된 기본 주소를 사용하여 실행 가능한 프로그램을 지원하는 프로그램 로딩 모듈. 두 모드 모두 고유한 장단점이 있습니다. 기존 PIC는 빠르게 실행되고 코드가 컴팩트하지만 예를 들어 Motorola 68K의 16비트 상대 버전은 있습니다. 아키텍처 점프는 PIC 프로그램의 크기를 32KB 이하로 제한합니다. 런타임 동안 고정 기본 주소를 사용하여 나열되는 프로그램 코드에는 크기 제한이 없지만 Chen Xu가 커널에 의해 로드되면 커널 개발자에게 더 많은 시스템 오버헤드가 발생합니다. uCLinux는 기본적으로 Linux와 다르지 않다고 합니다. 유일한 차이점은 MMU에서 제공하는 메모리 관리를 사용할 수 없다는 것입니다. 실제로 이는 Linux에서 모든 표준 실행 파일 형식을 지원하지 않습니다. 이 형식은 가상 메모리의 일부 기능도 사용하기 때문에 uCLinux는 간결하고 효율적인 실행 파일 형식이며 로드하는 데 필요한 일부 실행 파일을 포함합니다.

요약: 애플리케이션을 uClinux로 포팅하고 코드를 직접 작성하는 과정에서 우리는 항상 다음 기능에 중점을 둘 것입니다.

1 가능하면 —disable-을 선택해야 합니다.

2. 소스 코드의 모든 fork() 항목을 vfork()로 변경합니다.

3 Makefile Cross 컴파일러 및 컴파일 옵션에서 링크에 -Wl, -elf2flt를 추가합니다. 옵션. 이는 연결 옵션일 뿐이지만 LDFLAGS, CFLAGS, 심지어 CC에서도 이 옵션을 주의 깊게 지정합니다.​

추천 학습: Linux 비디오 튜토리얼

위 내용은 uclinux와 리눅스의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.