1.
2.
块设备:磁盘设备驱动、SD设备驱动
字符设备:终端设备驱动
网络设备:网络设备驱动
(1)linux操作系统驱动程序分为三大类:字符设备驱动、快设备驱动和网络设备驱动
(2)字符设备驱动例子
1. LED
2. IIC
3. SPI
4. 音频设备
5. LCD
(2)块设备驱动的例子(存储器设备的驱动)
EMMC、NAND、SD卡、U盘
(3)网络设备驱动
USB WIFI (USB接口为字符设备驱动、能上网也属于网络设备驱动)
3.
32位系统上,每个linux进程的虚拟地址空间通常位4GB,因为32位地址空间的最大寻址能力位2^32字节,即4294987296字节,约等于4GB
4.
若干等待CPU运行的进程按次序链接起来的队列称为就绪队列
就绪队列
(1)定义
就绪队列是操作系统调度程序维护的一个列表,其中包含所有已经准备好并等待被分配到CPU上运行的进程。每个进程在就绪队列中等待的时间称为等待时间
(2)特点
1. 进程状态
就绪队列中的进程处于就绪状态,它们已经具备了运行的所有条件,只等待CPU资源的分配
2. 调度
操作系统的调度程序从就绪对=队列中选择一个进程,将CPU分配给该进程进行执行
调度算法决定了从就绪队列中选择哪个进程
3. 实现形式
通常以链表、队列实现
4.
linux中的虚拟地址到物理地址转换工作是由 (硬件地址转换单元)完成的
MMU
在 Linux 中,虚拟地址到物理地址的转换是由 内存管理单元(MMU, Memory Management Unit) 完成的。MMU 是硬件的一部分,它负责将进程的虚拟内存地址翻译成实际的物理内存地址。操作系统内核(例如 Linux 内核)为每个进程维护了页表(Page Table),这些页表存储了虚拟地址到物理地址的映射关系。MMU 会根据页表的内容进行地址转换,当进程访问内存时,MMU 会将虚拟地址转换为相应的物理地址,并访问该物理内存位置
5. c语言关键字
int float double long short char void union enum
while do if else switch case for break continue default goto
register extern static volatile
auto return sizeof const signed unsigned
struct typedef
6.
7.
嵌入式ARM架构嵌入式处理器的特点
(1)具有大量的寄存器和指令执行速度快
1. 丰富的寄存器集
ARM架构通常通常有一个相对较大的通用寄存器集(16个32位寄存器),
2. 精简指令集(RISC)架构
ARM处理器采用精简指令集计算(RISC)架构,指令集较为简单且固定长度,这使得指令的解码和执行可以更加快速和高效
(2)寻址方式简单,常用固定长度的指令格式
1. ARM架构采用了一组简单而有效的寻址模式,使得指令可以高效访问内存和寄存器,简化了编译器的设计,提高了指令的执行效率
2. 大多数ARM指令都是固定长度的(通常32位),这有助于简化指令解码和流水线处理过程
(3)同时支持大小端数据格式
ARM架构可以配置为大端(Big-endian)或小端(Little-endian)模式,这使得ARM处理器在不同的系统和应用环境中具有更大的灵活性
(4)绝大多数操作都在寄存器中进行通过LOAD/STORE的体系结构在内存和寄存器之间传递数据
8. IPv4地址的每个部分必须是0到255之间的整数,因此 192.168.1.256 是一个无效的IP地址
9.
(1)基于UDP协议的网络应用协议
1. DNS(域名系统)
2. DHCP(动态主机配置协议)
3. TFTP(简单文件传输协议)
4. SNMP(简单网络管理协议)
5. SIP(会话初始协议)
6. Syslog(使用UDP端口514)
(2)基于TCP协议的网络应用协议
1. HTTP(超文本传输协议)
2. HTTPS(安全超文本传输协议)
3. FTP(文件传输协议)
4. SMTP(简单邮件传输协议)
4. SSH(安全外壳)
(3)支持UDP和TCP的协议
1. DNS
2. SIP
3. Syslog
10.
(1)PID(Process ID)
PID用于唯一标识一个进程,在操作系统中,每个运行中的进程都会被分配一个唯一的PID
通过PID,操作系统能够管理和调度进程,如创建进程、终止进程、监视进程状态等
(2)TID(Thread ID)
TID用于唯一标识一个线程,在多线程环境中,一个进程可以包含多个线程,每个线程都有一个唯一的TID。TID用于操作系统管理和调度线程,如创建线程、终止线程、监视线程状态等
(3)在一个进程内部,每个线程有一个TID,TID在进程内唯一,但在整个系统中,可能会存在多个进程中的线程拥有相同的TID
11.
、(1)管道(Pipe)
管道是一种用于进程间通信(IPC)的机制。它允许一个进程将数据写入管道,另一个进程从管道读取数据。管道可以是无名管道或命名管道
无名管道(Anonymous Pipe):用于有亲缘关系的进程之间通信(如父子进程)。在Unix和Linux系统中使用pipe()
系统调用创建
命名管道(Named Pipe):可以在无亲缘关系的进程之间通信。在Unix和Linux系统中使用mkfifo()
创建,在Windows系统中使用CreateNamedPipe()
创建
管道通常用于数据流的传递,并且是半双工的(数据只能单向流动)。通过管道可以实现简单的进程间通信,但不用于同步
(2)套接字(Socket)
套接字是网络通信的端点,用于在不同计算机之间进行数据传输。它提供了一种双向通信机制,可以基于不同的协议,如TCP和UDP
套接字用于网络通信,但不用于同步
(3)信号量(进线程都能用)
信号量是一种同步机制,用于控制对共享资源的访问
1. 计数信号量:允许多个线程访问一定数量的资源
2. 二元信号量:类似于互斥锁,只允许一个线程访问资源
信号量可以防止竞争条件(race condition),确保在多个线程或进程间的正确同步
(4)临界区
临界区指代码中需要独占访问共享资源的部分。在多线程编程中,使用同步机制(如互斥锁)来保护临界区,以防止多个进程同时访问导致数据不一致
(5)总结
同步:信号量、临界区(通过互斥锁)
非同步:管道、套接字
12.
在操作系统中,库、调度、进程管理、内存管理都是必不可少的
操作系统的组成
(1)内核
1. 进程管理
2. 内存管理
3. 设备驱动程序
4. 文件系统
5. 安全与权限问题
(2)用户界面
(3)系统调用接口
系统调用接口提供了一组系统调用(API),供应用程序调用以访问操作系统的服务。系统调用是用户程序与内核进行交互的主要方式,常见的系统调用包括进程控制、文件操作、设备操作、通信等
(4)驱动程序
驱动程序是操作系统的一部分,负责控制和操作具体硬件设备。它们提供标准化接口,使操作系统和应用程序能够与硬件设备进行通信和控制
(5)系统服务
(6)库和工具
1. 标准库
2. 系统工具
(7)设备管理
(8)文件系统
13.
RARP、ARP、IP属于网络层协议
TCP/IP模型各层的常用协议
1. 应用层
- HTTP(HyperText Transfer Protocol):用于万维网上传输网页数据。
- HTTPS(HTTP Secure):HTTP的加密版本,使用TLS/SSL加密数据。
- FTP(File Transfer Protocol):用于在网络上进行文件传输。
- SMTP(Simple Mail Transfer Protocol):用于发送电子邮件。
- DNS(Domain Name System):将域名解析为IP地址。
- SSH(Secure Shell):用于安全登录和其他安全的网络服务。
2. 传输层
- TCP(Transmission Control Protocol):提供可靠的、有序的、错误检查的数据传输。通过三次握手建立连接,适用于需要高可靠性的应用。
- UDP(User Datagram Protocol):提供无连接、不可靠的数据传输,速度快但不保证数据顺序和完整性,适用于对传输速度要求高但不要求可靠性的应用(如视频流、在线游戏)。
3. 网络层
- IP(Internet Protocol):核心协议,负责地址分配和数据包路由。包括IPv4和IPv6两个版本。
- ICMP(Internet Control Message Protocol):用于网络诊断和错误报告,如ping命令。
- ARP(Address Resolution Protocol):将IP地址解析为物理MAC地址。
- RARP(Reverse Address Resolution Protocol):将物理MAC地址解析为IP地址。
- OSPF(Open Shortest Path First):一种内部网关协议,用于在自治系统内进行路由选择。
- BGP(Border Gateway Protocol):一种外部网关协议,用于在不同自治系统之间进行路由选择。
4. 链路层
- Ethernet(以太网):最广泛使用的局域网技术,定义了电缆类型、传输速度和数据帧格式。
- PPP(Point-to-Point Protocol):用于通过串行连接(如电话线)传输数据。
- HDLC(High-Level Data Link Control):用于点对点和点对多点通信中的数据链路层控制。
- Wi-Fi(IEEE 802.11):无线局域网标准,定义了无线信号传输的方式和数据帧格式。
- Token Ring:一种局域网技术,数据帧通过一个逻辑环传输。
14.
本题中memcpy定义有误,再就是copy_from_kernel传参缺失,以下是修改版本
void *memcpy(void *dest, const void *src, size_t n);
#define KSZIE 10244
char kbuf[KSZIE];
int copy_from_kernel(void *user_dest, const void *kernel_src, int maxlen)
{
int len = 0;
(char *)user_dest = kbuf;
len = KSZIE < maxlen ? KSZIE : maxlen;
memcpy(user_dest, kernel_src, len);
return len;
}