UCOS 운영체제란 무엇인가요?
u C/OS는 제거 가능한 실시간 커널을 갖춘 무료 오픈 소스, 소형 실시간 운영 체제입니다.
μC/OS-II의 전신은 μC/OS로, 1992년 미국 임베디드 시스템 전문가인 진 J. 라브로스(Jean J. Labrosse)가 '임베디드 시스템 프로그래밍' 매거진 5월과 6월호에 처음 발표했습니다. 기사가 연재되었고 μC/OS의 소스 코드가 잡지 BBS에 게재되었습니다.
μC/OS 및 μC/OS-II는 임베디드 컴퓨터 애플리케이션을 위해 특별히 설계되었으며 대부분의 코드는 C 언어로 작성되었습니다. CPU 하드웨어 관련 부분은 어셈블리 언어로 작성되었으며, 다른 CPU로의 이식을 용이하게 하기 위해 총 200라인 정도의 어셈블리 언어 부분을 최소한으로 압축했습니다. 사용자가 표준 ANSI C 크로스 컴파일러, 어셈블러, 커넥터 및 기타 소프트웨어 도구를 갖고 있는 한 개발된 제품에 μC/OS-II를 내장할 수 있습니다. μC/OS-II는 높은 실행 효율성, 작은 설치 공간, 탁월한 실시간 성능 및 강력한 확장성을 특징으로 합니다. 최소 커널은 2KB까지 컴파일할 수 있습니다. μC/OS-II는 잘 알려진 거의 모든 CPU에 이식되었습니다.
엄밀히 말하면 uC/OS-II는 작업 스케줄링, 작업 관리, 시간 관리, 메모리 관리, 작업 간 통신 및 동기화 등의 기본 기능만 포함하는 실시간 운영체제 커널일 뿐입니다. . 입출력 관리, 파일 시스템, 네트워크 등의 추가 서비스는 제공되지 않습니다. 그러나 uC/OS-II의 우수한 확장성과 오픈 소스 코드 덕분에 이러한 필수적이지 않은 기능도 사용자의 필요에 따라 직접 구현할 수 있습니다.
uC/OS-II의 목표는 우선순위 스케줄링을 기반으로 하는 선점형 실시간 커널을 구현하고 이 커널에서 세마포어, 메일박스, 메시지 큐 및 기타 가장 기본적인 시스템 서비스를 제공하는 것입니다. 메모리 관리, 인터럽트 관리 등
작업 관리
uC/OS-II는 우선순위 수준 0~63(0이 가장 높은 우선순위)에 해당하는 최대 64개의 작업을 지원할 수 있습니다. 63은 가장 낮은 수준입니다. 시스템은 우선 순위가 가장 높은 작업 4개와 우선 순위가 가장 낮은 작업 4개를 예약합니다. 모든 사용자가 사용할 수 있는 작업 수는 56개입니다.
uC/OS-II는 작업 생성, 작업 삭제, 작업 우선순위 변경, 작업 일시 중지 및 복구 등 작업 관리를 위한 다양한 함수 호출을 제공합니다.
시스템이 초기화되면 두 가지 작업이 자동으로 생성됩니다. 하나는 우선순위가 가장 낮은 유휴 작업이고, 다른 하나는 정수 변수에 대해서만 누적 작업을 수행합니다. , 우선 순위는 다음과 같습니다. 두 번째로 낮은 작업은 현재 CPU 사용률을 계산하는 역할을 합니다.
시간 관리
uC/OS-II의 시간 관리는 예약된 인터럽트를 통해 구현됩니다. 이 예약된 인터럽트는 일반적으로 10밀리초 또는 100밀리초마다 한 번씩 발생합니다. 하드웨어 시스템의 타이머를 프로그래밍하여 구현됩니다. 인터럽트 사이의 시간 간격은 고정되어 있으며 인터럽트도 클록 비트가 됩니다.
uC/OS-II에서는 인터럽트 수준 작업 전환 기능, 시스템 시간 기능 등 예약된 인터럽트 서비스 프로그램에서 시스템이 제공하는 클록 비트 관련 시스템 기능을 사용자가 호출해야 합니다.
메모리 관리
ANSI C에서는 malloc과 free라는 두 가지 함수를 사용하여 메모리를 동적으로 할당하고 해제합니다. 그러나 임베디드 실시간 시스템에서는 이러한 실수가 여러 번 발생하면 메모리 조각화가 발생하고 메모리 관리 알고리즘으로 인해 malloc 및 free의 실행 시간도 불확실합니다.
uC/OS-II에서는 파티션별로 연속적인 대용량 메모리를 관리한다. 각 파티션에는 동일한 크기의 메모리 블록이 정수로 포함되어 있지만 서로 다른 파티션 간의 메모리 블록 크기는 다를 수 있습니다. 사용자가 동적으로 메모리를 할당해야 하는 경우 시스템은 적절한 파티션을 선택하고 메모리를 블록 단위로 할당합니다. 메모리가 해제되면 블록은 이전에 속했던 파티션으로 다시 배치됩니다. 이렇게 하면 조각화 문제를 효과적으로 해결할 수 있으며 실행 시간도 고정됩니다.
작업 간 통신 및 동기화
멀티 태스킹 운영 체제의 경우 작업 간 통신 및 동기화가 필수적입니다. uC/OS-II는 세마포어, 메일박스, 메시지 큐, 이벤트라는 4가지 동기화 객체를 제공합니다. 이러한 모든 동기화 개체에는 프로세스 간 통신 및 동기화를 구현하기 위해 생성, 대기, 전송 및 쿼리를 위한 인터페이스가 있습니다.
작업 스케줄링
uC/OS-II는 박탈 가능한 실시간 멀티태스킹 커널을 사용합니다. 선점형 실시간 커널은 언제든지 준비된 가장 높은 우선순위의 작업을 실행합니다.
uC/os-II의 작업 스케줄링은 전적으로 작업 우선순위에 기반한 선점형 스케줄링입니다. 즉, 우선순위가 가장 높은 작업이 준비 상태가 되면 실행 중인 우선순위가 낮은 작업의 처리를 즉시 선점합니다. .서버 리소스. 시스템 설계를 단순화하기 위해 uC/OS-II는 모든 작업이 서로 다른 우선순위를 갖도록 규정합니다. 작업의 우선순위는 작업 자체도 고유하게 식별하기 때문입니다.
작업 예약은 다음과 같은 상황에서 발생합니다.
1) 우선 순위가 높은 작업에는 특정 중요한 리소스가 필요하므로 적극적으로 일시 중지를 요청하고 프로세서를 포기합니다. 예약된 준비 상태의 낮은 우선순위 작업이 실행됩니다. 이러한 종류의 예약을 작업 수준 컨텍스트 전환이라고도 합니다.
2) 우선순위가 높은 작업에 대한 클록 비트가 도착하면 클록 인터럽트 핸들러에서 커널은 우선순위가 높은 작업이 실행 조건(예: 휴면 시계가 만료됨)을 획득했음을 발견합니다. 그런 다음 인터럽트 상태에서 우선 순위가 높은 작업 실행으로 직접 전환합니다. 이러한 종류의 스케줄링을 인터럽트 수준 컨텍스트 전환이라고도 합니다.
이 두 가지 스케줄링 방법은 uC/OS-II의 실행 과정에서 매우 일반적으로 사용되며, 일반적으로 전자는 시스템 서비스에서 발생하고 후자는 클럭 인터럽트 서비스 프로그램에서 발생합니다.
작업 스케줄링의 내용은 우선순위가 가장 높은 작업 찾기와 작업 전환 두 부분으로 나눌 수 있습니다. 가장 우선순위가 높은 작업에 대한 검색은 준비된 작업 목록을 설정하여 수행됩니다. u C/OS의 각 작업은 독립적인 스택 공간과 Task Control Block TCB(Task Control Block)이라는 데이터 구조를 가지며, 여기서 첫 번째 멤버 변수는 저장된 작업 스택 포인터입니다. 작업 스케줄링 모듈은 먼저 변수 OSTCBHighRdy를 사용하여 현재 최고 수준 준비 작업의 TCB 주소를 기록한 다음 OS_TASK_SW() 함수를 호출하여 작업 전환을 수행합니다.
μC/OS-II의 구성 요소
μC/OS-II는 크게 코어, 작업 처리, 시간 처리, 작업 동기화 및 통신, CPU 이식의 다섯 부분으로 나눌 수 있습니다. .
1) 핵심 부분(OSCore.c)
운영 체제 초기화, 운영 체제 실행, 인터럽트 진입 및 종료 프리앰블, 클럭 비트를 포함한 운영 체제의 처리 코어입니다. , 작업 예약, 이벤트 처리 및 기타 여러 부분. 시스템의 기본적인 동작을 유지할 수 있는 부품들이 모두 여기에 있습니다.
2) 태스크 처리 부분(OSTask.c)
태스크 처리 부분의 내용은 태스크의 동작과 밀접하게 연관되어 있다. 작업 생성, 삭제, 일시 중지, 복구 등을 포함합니다. μC/OS-II는 작업을 기본 단위로 스케줄링하기 때문에 이 부분의 내용도 매우 중요합니다.
3) 시계 부분(OSTime.c)
μC/OS-II에서 가장 작은 시계 단위는 timetick(시계 비트)입니다. 작업 지연과 같은 작업이 여기에서 완료됩니다.
4) 작업 동기화 및 통신 부분
세마포어, 메일함, 메일함 큐, 이벤트 플래그 등을 포함하는 이벤트 처리 부분으로 주로 상호 연결에 사용됩니다. 작업 간의 상호 작용. 중요한 리소스에 대한 액세스.
5) CPU와의 인터페이스 부분
사용하는 CPU에 대한 μC/OS-II 이식 부분을 말합니다. μC/OS-II는 범용 운영 체제이기 때문에 주요 문제의 구현은 특정 CPU의 특정 내용과 요구 사항에 따라 여전히 이식되어야 합니다.
내용의 이 부분은 SP와 같은 시스템 포인터를 포함하기 때문에 일반적으로 어셈블리 언어로 작성됩니다. 여기에는 주로 인터럽트 수준 작업 전환의 기본 구현, 작업 수준 작업 전환의 기본 구현, 클럭 비트 생성 및 처리, 인터럽트 관련 처리 부분이 포함됩니다.