prefacio
Damos un gráfico jerárquico de tal computadora:
Se puede ver que todo el sistema informático se divide en capa de hardware y capa de software.
En la capa de software tenemos la capa del kernel y la capa del usuario.
El sistema operativo es una pieza de software que se encuentra entre el hardware y el software del usuario, que administra varios hardware desde abajo y brinda servicios para el software del usuario en la parte superior. Podemos comparar así
usuario | director de escuela |
---|---|
Sistema operativo | consejero |
hardware | estudiante |
Si queremos administrar bien el hardware, necesitamos a alguien que entienda de hardware que nos ayude a administrar el hardware, ese es el sistema operativo
Sin embargo, para garantizar la seguridad, el sistema operativo solo abrirá interfaces específicas para las personas. Solo a través de interfaces específicas, las personas pueden realizar una gestión específica del hardware. Tales interfaces se denominan系统调用接口
Sin embargo, la interfaz de llamada al sistema es relativamente complicada y es demasiado molesto usar la interfaz de llamada al sistema para administrar el hardware cada vez. Por lo tanto, algunas personas con motivos ocultos han llevado a cabo la interfaz de llamada al sistema 二次封装
y encapsulado una interfaz humanizada más amigable para personas a las que llamar, por ejemplo:
- función de biblioteca de lenguaje C
- intérprete de línea de comandos
- Interfaz gráfica
Con todo, este diagrama de jerarquía lo explica todo:
A continuación, tomemos el sistema operativo Linux como ejemplo para ver cómo funcionan la interfaz de llamada del sistema y las funciones secundarias de la biblioteca de lenguaje C encapsulado 读/写
.
1. Interfaz de llamada al sistema
1. Investigue el uso de funciones como abrir, leer, escribir, buscar, cerrar, etc., y comprender los descriptores de archivos
2. Requisitos:
2.1 Use el código para abrir el archivo "bite" en la ruta actual (si el archivo no no existe, cree un archivo), y envíe el archivo al archivo. Escriba "¡Me gusta Linux!" en él.
2.2 Lea el contenido del archivo e imprímalo en la salida estándar; cierre el descriptor de archivo
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main() {
int fd = open("bite", O_WRONLY|O_CREAT, 0644);
const char* buffer = "i like linux\n";
write(fd, buffer, strlen(buffer));
close(fd);
fd = open("bite", O_RDONLY, 0644);
char output[128] = {
'\0'};
read(fd, output, 127);
write(1, output, strlen(output));
close(fd);
return 0;
}
2. Funciones de la biblioteca de lenguaje C
1. Investigue el uso de funciones como fopen, fread, fwrite, fseek, fclose, etc.
2. Requisitos:
2.1 Use el código para abrir el archivo "bite" en la ruta actual (si el archivo no existe, cree un archivo) y escriba "linux so" en el archivo ¡fácil!".
2.2 Lea el contenido del archivo e imprímalo en la salida estándar; cierre el puntero de flujo de archivo
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
FILE* fp = fopen("bite", "w");
const char* buffer = "linux so easy\n";
fwrite(buffer, 1, strlen(buffer), fp);
fclose(fp);
fp = fopen("bite", "r");
char output[128] = {
0};
fread(output, 1, 128, fp);
fprintf(stdout, "%s", output);
fclose(fp);
return 0;
}
3. Resumen
Podemos ver que tanto la interfaz de llamada del sistema como las funciones de la biblioteca del lenguaje C pueden completar operaciones de lectura y escritura. En general:
- Desde el punto de vista del desarrollo, el sistema operativo aparece como un todo para el mundo exterior, pero expondrá algunas de sus propias interfaces para el desarrollo de nivel superior.Esta parte de la interfaz proporcionada por el sistema operativo se denomina llamadas al sistema.
- En términos de uso, las llamadas al sistema tienen funciones relativamente básicas y requisitos relativamente altos para los usuarios. Por lo tanto, los desarrolladores interesados pueden encapsular adecuadamente algunas llamadas al sistema para formar bibliotecas. Con las bibliotecas, es muy beneficioso para los usuarios de nivel superior o El desarrollador lleva a cabo un desarrollo secundario. .