课时总结:
嵌入式C编程的语法、使用
嵌入式为什么要移植操作系统?
提供软件的移植性;
操作系统提供了多任务操作;
操作系统提供了丰富的网络协议栈;
操作系统将所有设备抽象成文件,方便访问设备;
Linux系统构成/划分:用户空间、内核空间
为什么将系统划分为用户空间、内核空间?
答:保护内核的安全;
· 用户可以通过系统调用访问内核空间
内核提供安全的访问内核的数据及服务的接口:系统调用
用户如何发生系统调用?
答:调用系统提供的编程函数接口–API(用户编程接口)
文件描述符:(文件id)
知道一个文件描述符、操作这个文件描述符,相当于在操作这个文件
文件描述符的分配方式:动态分配(只有当你操作这个文件,系统才会给你分配文件描述符,使用完毕之后回收)
0,1,2这三个文件描述符已经被系统占用,有特殊作用,所以说系统的普通文件id是从3开始的
文件API(记头文件、记函数原型(形参和返回值的作用)、写测试、应用)
Creat;open;read;write;lseek;close
多任务编程:
单任务:
在一个任务执行期间,其他任务不能被调度;
多任务:
当前CPU单核,存在任务并发,不存在并行;
当前CPU多核,既存在并发,也存在并行;
实现多任务的方式
进程:
实现多任务的开销较大,因为每个进程都有4G的独立地址空间,导致进程间通信效率不高,优点:安全。
线程:
实现多任务的开销较小,因为每个线程共享地址空间,通信效率高,缺点:不安全。
线程和进程的关系
线程是进程的一个执行单元,是进程内的调度实体,比进程更小的独立运行的基本单位,线程也被称为轻量级进程
同一进程的线程共享本进程的地址空间,而进程之间是独立的地址空间
一个进程崩溃后,不会对其他进程产生影响,但是一个线程崩溃整个进程都四点,所以多进程比多线程健壮
线程拥有的属性:
每个线程拥有自己独立的线程ID;每个线程有独立的切换状态;调度优先级;有自己独立的函数栈;自己独立的错误号;每一个线程有自己独立的信号屏蔽字和未决信号集;每个线程有自己独立的tack_struct结构体