当前位置: 首页 > news >正文

杭州做网站下沙有哪些做婚品的网站

杭州做网站下沙,有哪些做婚品的网站,杭州h5建站,网站重构工程师Linux内核预备工作 理解Linux内核最好预备的知识点#xff1a;懂C语言 懂一点操作系统的知识 熟悉少量相关算法 懂计算机体系结构 Linux内核的特点#xff1a; 结合了 unix 操作系统的一些基础概念。 Linux内核的任务#xff1a; 1. 从技术层面讲#xff0c;内核是硬…Linux内核预备工作 理解Linux内核最好预备的知识点懂C语言 懂一点操作系统的知识 熟悉少量相关算法 懂计算机体系结构 Linux内核的特点 结合了 unix 操作系统的一些基础概念。 Linux内核的任务 1. 从技术层面讲内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件并充当底层驱动程序对系统中的各种设备和组件进行寻址。 2. 从应用程序的层面讲应用程序与硬件没有联系只与内核有联系内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。 3. 内核是一个资源管理程序。负责将可用的共享资源CPU时间、磁盘空间、网络连接等分配得到各个系统进程。 4. 内核就像一个库提供了一组面向系统的命令。系统调用对于应用程序来说就像调用普通函数一样。 内核实现策略 1. 微内核。最基本的功能由中央内核微内核实现。所有其他的功能都委托给一些独立进程这些进程通过明确定义的通信接口与中心内核通信。 2. 宏内核。内核的所有代码包括子系统如内存管理、文件管理、设备驱动程序都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。目前支持模块的动态装卸裁剪。Linux内核就是基于这个策略实现的。 哪些地方用到了内核机制 1. 进程在cpu的虚拟内存中分配地址空间各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目之间进行通 信需要使用特定的内核机制。 2. 进程间切换(同时执行的进程数最多不超过cpu数目)也需要用到内核机制。进程切换也需要像 FreeRTOS 任务切换一样保存状态并将进程置于闲置状态/恢复状态。 3. 进程的调度。确认哪个进程运行多长的时间。 Linux进程 1. 采用层次结构每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init 进程是进程树的根所有的进程都直接或者间接起源于该进程。 2. 通过pstree命令查询。实际上系统的第一个进程是 systemd而不是init这也是疑问点 3. 系统中每一个进程都有一个唯一标识符(ID),用户或其他进程可以使用ID来访问进程。 Linux内核源代码的目录结构 Linux内核源代码包括三个主要部分 1. 内核核心代码包括第3章所描述的各个子系统和子模块以及其它的支撑子系统例如电源管理、Linux初始化等。 2. 其它非核心代码例如库文件因为Linux内核是一个自包含的内核即内核不依赖其它的任何软件自己就可以编译通过、固件集合、KVM虚拟机技术等。 3. 编译脚本、配置文件、帮助文档、版权说明等辅助性文件。使用 ls 命令看到的内核源代码的顶层目录结构Linux kernel 3.10具体描述如下。 include/--- 内核头文件需要提供给外部模块例如用户空间代码使用。 kernel/--- Linux内核的核心代码包含了3.2小节所描述的进程调度子系统以及和进程调度相关的模块。 mm/--- 内存管理子系统3.3小节。 fs/--- VFS子系统3.4小节。 net/--- 不包括网络设备驱动的网络子系统3.5小节。 ipc/--- IPC进程间通信子系统。 arch/ --- 体系结构相关的代码例如 arm, x86 等等。 arch/mach --- 具体 machine/board 相关的代码。 arch/include/asm --- 体系结构相关的头文件。 arch/boot/dts --- 设备树Device Tree文件。 init/--- Linux系统启动初始化相关的代码。 block/--- 提供块设备的层次。 sound/--- 音频相关的驱动及子系统可以看作“音频子系统”。 drivers/--- 设备驱动在Linux kernel 3.10中设备驱动占了49.4的代码量。 lib/--- 实现需要在内核中使用的库函数例如CRC、FIFO、list、MD5等。 crypto/--- 加密、解密相关的库函数。 security/--- 提供安全特性SELinux。 virt/--- 提供虚拟机技术KVM等的支持。 usr/--- 用于生成 initramfs 的代码。 firmware/--- 保存用于驱动第三方设备的固件。 samples/--- 一些示例代码。 tools/--- 一些常用工具如性能剖析、自测试等。 Kconfig, Kbuild, Makefile, scripts/ --- 用于内核编译的配置文件、脚本等。 COPYING --- 版权声明。 MAINTAINERS ---维护者名单。 CREDITS --- Linux主要的贡献者名单。 REPORTING-BUGS --- Bug上报的指南。 Documentation, README --- 帮助、说明文档。 Linux内核体系结构简析 图1 Linux系统层次结构 最上面是用户或应用程序空间。这是用户应用程序执行的地方。用户空间之下是内核空间Linux 内核正是位于这里。GNU C Library glibc也在这里。它提供了连接内核的系统调用接口还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间而内核则占用单独的地址空间。 Linux 内核可以进一步划分成 3 层。最上面是系统调用接口它实现了一些基本的功能例如 read 和 write。系统调用接口之下是内核代码可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码构成了通常称为 BSPBoard Support Package的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。 Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上内核被划分为多个子系统。Linux 也可以看作是一个整体因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同后者会提供一些基本的服务例如通信、I/O、内存和进程管理更具体的服务都是插入到微内核层中的。每种内核都有自己的优点不过这里并不对此进行讨论。 随着时间的流逝Linux 内核在内存和 CPU 使用方面具有较高的效率并且非常稳定。但是对于 Linux 来说最为有趣的是在这种大小和复杂性的前提下依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元MMU的处理器上运行也可以在那些不提供 MMU 的处理器上运行。 Linux 内核的 uClinux 移植提供了对非 MMU 的支持。图2是Linux内核的体系结构 图2 Linux内核体系结构Linux内核的主要组件有 系统调用接口、进程管理、内存管理、虚拟文件系统、网络协议栈、设备驱动程序、硬件架构的相关代码。 1系统调用接口 SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样这个接口依赖于体系结构甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现并在 ./linux/arch 中找到依赖于体系结构的部分。 2进程管理 进程管理的重点是进程的执行。在内核中这些进程称为线程代表了单独的处理器虚拟化线程代码、数据、堆栈和 CPU 寄存器。在用户空间通常使用进程 这个术语不过 Linux 实现并没有区分这两个概念进程和线程。内核通过 SCI 提供了一个应用程序编程接口API来创建一个新进程fork、exec 或 Portable Operating System Interface [POSIX] 函数停止进程kill、exit并在它们之间进行通信和同步signal 或者 POSIX 机制。进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法不管有多少个线程在竞争 CPU这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O(1) 调度程序也可以支持多处理器称为对称多处理器或 SMP。您可以在 ./linux/kernel 中找到进程管理的源代码在 ./linux/arch 中可以找到依赖于体系结构的源代码。 3内存管理 内核所管理的另外一个重要资源是内存。为了提高效率如果由硬件管理虚拟内存内存是按照所谓的内存页 方式进行管理的对于大部分体系结构来说都是 4KB。 Linux 包括了管理可用内存的方式以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数然后从中分配结构并跟踪内存页使用情况比如哪些内存页是满的哪些页面没有完全使用哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存有时会出现可用内存被消耗光的情况。由于这个原因页面可以移出内存并放入磁盘中。这个过程称为交换因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。 4虚拟文件系统 虚拟文件系统VFS是 Linux 内核中非常有用的一个方面因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层请参看图4。 图3 Linux文件系统层次结构在 VFS 上面是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象它定义了上层函数的实现方式。它们是给定文件系统超过 50 个的插件。文件系统的源代码可以在 ./linux/fs 中找到。文件系统层之下是缓冲区缓存它为文件系统层提供了一个通用函数集与具体文件系统无关。这个缓存层通过将数据保留一段时间或者随即预先读取数据以便在需要是就可用优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序它实现了特定物理设备的接口。 5网络协议栈 网络协议栈在设计上遵循模拟协议本身的分层体系结构。回想一下Internet Protocol (IP) 是传输协议通常称为传输控制协议或 TCP下面的核心网络层协议。TCP 上面是 socket 层它是通过 SCI 进行调用的。socket 层是网络子系统的标准 API它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元PDU再到 TCP 和 User Datagram Protocol (UDP)socket 层提供了一种标准化的方法来管理连接并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。 6设备驱动程序 Linux 内核中有大量代码都在设备驱动程序中它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录这个目录又进一步划分为各种支持设备例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。 7依赖体系结构的代码 尽管 Linux 很大程度上独立于所运行的体系结构但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分其中包含了各种特定于体系结构的子目录共同组成了 BSP。对于一个典型的桌面系统来说使用的是 x86 目录。每个体系结构子目录都包含了很多其他子目录每个子目录都关注内核中的一个特定方面例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。 如果 Linux 内核的可移植性和效率还不够好Linux 还提供了其他一些特性它们无法划分到上面的分类中。作为一个生产操作系统和开源软件Linux 是测试新协议及其增强的良好平台。Linux 支持大量网络协议包括典型的 TCP/IP以及高速网络的扩展大于 1 Gigabit Ethernet [GbE] 和 10 GbE。Linux 也可以支持诸如流控制传输协议SCTP之类的协议它提供了很多比 TCP 更高级的特性是传输层协议的接替者。Linux 还是一个动态内核支持动态添加或删除软件组件。被称为动态可加载内核模块它们可以在引导时根据需要当前特定设备需要这个模块或在任何时候由用户插入。 Linux 最新的一个增强是可以用作其他操作系统的操作系统称为系统管理程序。最近对内核进行了修改称为基于内核的虚拟机KVM。这个修改为用户空间启用了一个新的接口它可以允许其他操作系统在启用了 KVM 的内核之上运行。除了运行 Linux 的其他实例之外 Microsoft Windows 也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令。 资料直通车Linux内核源码技术学习路线视频教程内核源码 学习直通车Linuxc/c高级开发【直播公开课】 零声白金VIP体验卡零声白金VIP体验卡含基础架构/高性能存储/golang/QT/音视频/Linux内核 Linux体系结构和内核结构区别 1当被问到Linux体系结构就是Linux系统是怎么构成的时我们可以参照下图这么回答从大的方面讲Linux体系结构可以分为两块 1用户空间用户空间中又包含了用户的应用程序C库。 2内核空间内核空间包括系统调用内核以及与平台架构相关的代码。 2Linux体系结构要分成用户空间和内核空间的原因 1现代CPU通常都实现了不同的工作模式以ARM为例ARM实现了 7 种工作模式不同模式下 CPU 可以执行的指令或者访问的寄存器不同 1用户模式 usr 2系统模式 sys 3管理模式 svc 4快速中断 fiq 5外部中断 irq 6数据访问终止 abt 7未定义指令异常以 2X86为例X86实现了 4 个不同级别的权限Ring0—Ring3Ring0下可以执行特权指令可以访问 IO 设备Ring3 则有很多的限制。 2所以Linux从CPU的角度出发为了保护内核的安全把系统分成了2部分 3用户空间和内核空间是程序执行的两种不同状态我们可以通过“系统调用”和“硬件中断“来完成用户空间到内核空间的转移。 4Linux的内核结构注意区分LInux体系结构和Linux内核结构 Linux 驱动的 platform 机制 Linux 的这种 platform driver 机制和传统的 device_driver 机制相比一个十分明显的优势在于 platform 机制将本身的资源注册进内核由内核统一管理在驱动程序中使用这些资源时通过 platform_device 提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性并且拥有较好的可移植性和安全性。下面是 SPI 驱动层次示意图Linux 中的 SPI 总线可理解为 SPI 控制器引出的总线 和传统的驱动一样platform机制也分为三个步骤 1、总线注册阶段内核启动初始化时的main.c文件中的kernel_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(platform_bus_type)注册了一条platform总线虚拟总线platform_bus。 2、添加设备阶段 设备注册的时候Platform_device_register()→platform_device_add()→(pdev→dev.bus platform_bus_type)→device_add()就这样把设备给挂到虚拟的总线上。 3、驱动注册阶段Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(), 对在每个挂在虚拟的platform bus的设备作__driver_attach()→driver_probe_device()判断drv→bus→match()是否执行成功此时通过指针执行platform_match→strncmp(pdev→name , drv→name , BUS_ID_SIZE),如果相符就调用really_probe(实际就是执行相应设备的platform_driver→probe(platform_device)。)开始真正的探测如果probe成功则绑定设备到该驱动。从上面可以看出platform机制最后还是调用了bus_register() , device_add() , driver_register() 这三个关键的函数。下面看几个结构体 struct platform_device (/include/linux/Platform_device.h) {const char * name;int id;struct device dev;u32 num_resources;struct resource * resource; }; Platform_device 结构体描述了一个 platform 结构的设备在其中包含了一般设备的结构体 struct device dev; 设备的资源结构体 struct resource * resource;还有设备的名字 const char * name。注意这个名字一定要和后面platform_driver.driver àname相同原因会在后面说明。 该结构体中最重要的就是resource结构这也是之所以引入platform机制的原因。 struct resource ( /include/linux/ioport.h) {resource_size_t start;resource_size_t end;const char *name;unsigned long flags;struct resource *parent, *sibling, *child; }; 其中 flags 表示该资源的类型start 和 end 分别表示该资源的起始地址和结束地址(/include/linux/Platform_device.h) struct platform_driver {int (*probe)(struct platform_device *);int (*remove)(struct platform_device *);void (*shutdown)(struct platform_device *);int (*suspend)(struct platform_device *, pm_message_t state);int (*suspend_late)(struct platform_device *, pm_message_t state);int (*resume_early)(struct platform_device *);int (*resume)(struct platform_device *);struct device_driver driver; }; Platform_driver 结构体描述了一个 platform 结构的驱动。其中除了一些函数指针外还有一个一般驱动的 device_driver 结构。 名字要一致的原因 上面说的驱动在注册的时候会调用函数 bus_for_each_dev(), 对在每个挂在虚拟的platform bus 的设备作__driver_attach()→driver_probe_device()在此函数中会对dev和drv做初步的匹配调用的是drv-bus-match所指向的函数。 platform_driver_register 函数中 drv-driver.bus platform_bus_type所以 drv-bus-match 就为 platform_bus_type→match为 platform_match 函数该函数如下 static int platform_match(struct device * dev, struct device_driver * drv) {struct platform_device *pdev container_of(dev, struct platform_device, dev);return (strncmp(pdev-name, drv-name, BUS_ID_SIZE) 0); } 是比较 dev 和 drv 的 name相同则会进入 really_probe() 函数从而进入自己写的 probe 函数做进一步的匹配。所以 dev→name 和 driver→drv→name 在初始化时一定要填一样的。 不同类型的驱动其 match 函数是不一样的这个 platform 的驱动比较的是 dev 和drv 的名字还记得 usb 类驱动里的 match 吗它比较的是 Product ID 和 Vendor ID。 个人总结 Platform 机制的好处 1、提供 platform_bus_type 类型的总线把那些不是总线型的soc设备都添加到这条虚拟总线上。使得总线——设备——驱动的模式可以得到普及。 2、提供platform_device和platform_driver类型的数据结构将传统的device和driver数据结构嵌入其中并且加入resource成员以便于和Open Firmware这种动态传递设备资源的新型bootloader和kernel 接轨。 原文作者【一起学嵌入式】
http://www.zqtcl.cn/news/1013/

相关文章:

  • 郴州网站建设ku0735社交app开发成本预算表
  • 做poster的网站wordpress 每页文章数量
  • 网站域名怎么快速备案价格wordpress代码增强插件
  • 企业自己建网站怎么建iis8.5 wordpress
  • 温州网站建设的公司一个网站2级域名多
  • 网站一般做多大的wordpress搜索安全
  • seo描述快速排名seo关键词排名优化销售
  • 创业项目的网站做网站数据库设计
  • 给网站设置关键词在网站建设中要注意的问题
  • 大型门户网站系统合肥做网站便宜
  • 互联网官方网站医疗公司logo设计图片
  • 做网站用什么编程软件一网网站制作平台
  • wordpress 2.0漏洞手机网站 搜索优化 百度
  • 做网站不花钱新平台推广文案
  • 什么手机可做网站做网站找什么公司
  • 门户网站建设请示家装设计需要学什么软件
  • 国内规模大的建站公司连接wordpress
  • 珠海网站制作软件网站seo做点提升流量
  • 佛山市做网站的ui设计工具有哪些
  • 建设网站中期要做什么长春企业建站平台
  • 沂水做网站北京购物网站建设公司
  • 网站建设费会计分录网络公司的网页设计
  • 睢县网站建设云服务器网站搭建教程
  • html5做网站链接范例网站开发成本预算
  • 扁平化的网站有哪些中国零售业博览会
  • 淮南公司网站建设多少费用怀化职院网站
  • 邓州市建设局网站佛山网站建设哪家专业
  • 微信公众号对接网站建设网站需要几个文件夹
  • 网站技术培训学校网站如何在360做提交
  • 个人网站不能有盈利性质wordpress前台发表