Código fuente del kernel Rtos
Los libros tratan principalmente de teoría. Usted mismo puede encontrar un sistema operativo integrado de código abierto y observar juntos la implementación del código, lo cual será mucho mejor. Por ejemplo, también puede comprar un libro sobre FreeRTOS, aprender a compilarlo, ejecutarlo como una aplicación en su computadora, aprender a crear sus propios procesos y colaboración, y luego ingresar a la implementación API correspondiente para verlo. Programación del kernel, prioridad, gestión de memoria, gestión de recursos, cambio preventivo de tareas, etc.
Se eligió el sistema operativo integrado porque es lo suficientemente pequeño. Después de todo, mirar el código fuente de Linux para este asunto es un gran peligro. FreeRTOS tiene varias características principales de la mayoría de los sistemas operativos modernos y es un buen ejemplo del que aprender. Fue solo después de que aprendí FreeRTOS que gradualmente me volví más flexible en el conocimiento del sistema operativo hace unos años.
Cite algunos ejemplos de implementación en FreeRTOS:
1. Gestión de subprocesos:
Cree una pila privada para cada subproceso, cada vez que llame al subproceso. cualquier función, pasar parámetros requeridos, variables locales, etc. Colóquelo en la pila privada del hilo. Para que no haya confusión entre hilos. Generalmente, las pilas tienen un valor de longitud máxima para evitar desperdiciar demasiada memoria y también limitar demasiado la recursividad. Es necesario que una aplicación de sistema operativo estime la profundidad de la pila de llamadas al principio.
2. Gestión de la memoria:
Generalmente, primero solicita un gran bloque de memoria de la memoria física y establece una tabla de asignación para este bloque de memoria. Mientras haya memoria de aplicación, se grabará una y la memoria restante se fusionará en el momento apropiado cuando se libere la memoria. Existen muchas estrategias de asignación, como la asignación secuencial o preferencial del segmento libre más pequeño que cumpla las condiciones. Cada subproceso crea su propio montón, lo que ayuda a que la asignación de memoria sea más eficiente.
3. Cambio de proceso/hilo:
Al usar el temporizador en el hardware del sistema, se producirán interrupciones de hardware con regularidad. En este momento, el proceso/hilo actual se detendrá y todos los registros. guardarse en el proceso en la pila privada. La parte del código de la tarea que realmente se ejecuta entre interrupciones se llama intervalo de tiempo. Luego llame al controlador de interrupciones. Este controlador de interrupciones es la función de cambio de tareas en el kernel del sistema operativo. Volverá a seleccionar la tarea de mayor prioridad en el estado listo para ejecutar. Por lo tanto, comprender e implementar esta función de manejo de interrupciones es la clave para comprender el cambio de tareas. No te preocupes, el código no es largo.
4. Llamada al kernel del sistema operativo:
Las CPU modernas, incluidas algunas MCU integradas, distinguirán estrictamente entre espacio de usuario y espacio del kernel. Los recursos de los dos son relativamente independientes e incluso las pilas son diferentes. Cuando una aplicación de usuario necesita llamar a un servicio proporcionado por el kernel, generalmente coloca el símbolo de llamada del kernel, los parámetros y el valor de retorno que desea llamar en una ubicación específica de la memoria y luego activa una interrupción del software. Por ejemplo, la serie Cortex-M SVCall o la interrupción DOS 80. En este punto, cambie al modo kernel. El controlador de interrupciones en este modo distribuirá la solicitud de llamada de acuerdo con el contenido de la llamada del sistema y retrocederá de acuerdo con la dirección de retorno después de la ejecución.
Recomiendo 6.828/Otoño 2014. Los vídeos de años anteriores también son fáciles de encontrar. Este curso le presentará dos pequeños sistemas operativos: xv6 y jOS. La clase habla principalmente sobre xv6, un pequeño sistema operativo Unix. El laboratorio del curso se divide en 6 a 7 etapas para que usted complete los códigos clave de jOS.
La ventaja de este curso es que combina teoría con práctica, y el ritmo del curso es muy bueno.
Por ejemplo, después de realizar una llamada al sistema, puede intentar agregar una llamada de temporizador a xv6; después de hablar sobre subprocesos, puede intentar agregar una llamada al sistema a xv6 y luego dejar que el sistema admita subprocesos. . ...
Existen muchas decisiones de diseño diferentes entre la implementación de laboratorio de jOS y xv6. A través de la comparación, puedes entender mejor qué es un sistema operativo. Por supuesto, escribir código usted mismo (cómo convertir la teoría en práctica) será muy diferente
Alguna experiencia:
Las tareas pueden ser más esclarecedoras que las prácticas de laboratorio (o eso creo)) ;
Sería mejor si hubiera visto CSAPP. No necesita aprender a ensamblar, puede escribir shell y puede comprender la memoria.
6.828 tiene un sistema de envío de tareas. Siempre que tengas una dirección de correo electrónico, puedes registrarte y luego evaluar los laboratorios de los demás. ...
Después de tener algunas experiencias propias y luego leerlas en combinación con libros, puede ser completamente diferente.