¿Qué libro es mejor para aprender sobre sistemas operativos?
La mayoría de los libros son teóricos. Puede encontrar un sistema operativo integrado de código abierto e implementarlo junto con el código, y el efecto será mucho mejor. Por ejemplo, con FreeRTOS también puedes comprar un libro, aprender a compilarlo, ejecutarlo como una aplicación en tu computadora, aprender a crear tus propios procesos, colaborar en la programación e ingresar a la implementación API correspondiente. Programación del kernel, prioridad, gestión de memoria, gestión de recursos, cambio preventivo de tareas, etc.
Elegí el sistema operativo integrado porque es lo suficientemente pequeño. Después de todo, leer el código fuente de Linux es un gran obstáculo. FreeRTOS tiene la mayoría de las características principales de un sistema operativo moderno y realmente es un gran ejemplo del que aprender. Sólo después de aprender FreeRTOS me volví gradualmente más flexible con el conocimiento del sistema operativo que había adquirido hace unos años.
Cite algunos ejemplos implementados en FreeRTOS:
1. Gestión de subprocesos:
Cree una pila privada para cada subproceso y llame a cuando se llame a cualquier función. , las transferencias de parámetros requeridas, variables locales, etc. se colocarán en la pila privada del hilo. De esta forma no hay confusión entre hilos. Las pilas generalmente tienen un valor de longitud máxima para evitar desperdiciar demasiada memoria y limitar la recursividad excesivamente profunda. Al comienzo de una aplicación del sistema operativo, se requiere una estimación de la profundidad de la pila de llamadas.
2. Gestión de la memoria:
Generalmente, primero solicite un gran bloque de memoria de la memoria física, cree una tabla de asignación para esta memoria y, siempre que haya una solicitud de memoria, registre una. grabar y liberar memoria para elegir cuándo fusionar la memoria restante. Existen muchas estrategias de asignación, como la asignación secuencial o la asignación prioritaria 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á una interrupción del hardware en un intervalo determinado y el proceso/hilo actual se detendrá en todos los registros. se guardan en la pila privada del proceso. La parte del código de la tarea que realmente se ejecuta entre interrupciones se llama intervalo de tiempo. Luego llame a la función del controlador de interrupciones. El controlador de interrupciones es una función de cambio de tareas en el kernel del sistema operativo. Volverá a seleccionar la tarea con la mayor prioridad entre las tareas que están listas para ejecutarse. Por lo tanto, comprender e implementar este controlador de interrupciones es la clave para comprender el cambio de tareas. No te preocupes, el código no será demasiado largo.
4. Llamadas al kernel del sistema operativo:
Las CPU modernas (incluidas algunas MCU integradas) distinguen estrictamente entre el espacio del usuario y el espacio del kernel. Ambos son relativamente independientes en términos de recursos, incluso el espacio del kernel. pila También diferente. 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 a llamar en una ubicación específica de la memoria y luego activa una interrupción del software. Por ejemplo, el SVCall de la serie Cortex-M o la interrupción 80 de DOS. En este punto, cambia al modo kernel. La función del controlador de interrupciones en este modo enviará la solicitud de llamada de acuerdo con el contenido de la llamada al sistema y retrocederá de acuerdo con la dirección de retorno después de la ejecución.
Recomiendo 6.828/Otoño 2014, vídeos de años anteriores son fáciles de encontrar. Este curso cubre dos pequeños sistemas operativos: xv6 y jOS. El enfoque de este curso es xv6, un pequeño sistema operativo Unix. El laboratorio del curso se divide en 6-7 etapas, lo que le permite completar el código clave de jOS.
La ventaja de este curso es que combina teoría con práctica y el ritmo es ajustado.
Por ejemplo, después de hablar sobre llamadas al sistema, puede intentar agregar una llamada de temporizador en xv6; después de hablar sobre subprocesos, puede intentar agregar una llamada al sistema en xv6 y luego dejar que el sistema admita subprocesos; ... ...
Las implementaciones de laboratorio de jOS y xv6 tienen muchas decisiones de diseño diferentes y, al compararlas, puedes comprender mejor qué es un sistema operativo, por supuesto, escribir algo de código tú mismo lo hace; una gran diferencia (Cómo transformar la teoría en práctica)
Algunas sugerencias:
La tarea puede ser más esclarecedora que el laboratorio (en mi opinión);
Si Después de mirar C, encontrará que es más interesante que la implementación Lab de xv6, y también encontrará que es más interesante que la implementación Lab de jOS. p>
Si has visto CSAPP, eso es lo mejor, ni siquiera necesitas aprender a ensamblar, puedes escribir un shell y también entiendes la memoria.
6.828 Hay un sistema de envío de tareas. Solo necesitas registrar tu correo electrónico y luego podrás evaluar el laboratorio de cada uno...
Con algo de mi propia experiencia, puede que sea así. No será posible combinarlo con libros.