算法学习笔记-动态规划
动态规划是一种非常常见的算法,但是在学习算法很久以后才理解什么是动态规划,因为动态规划实在是“名不符其实”,从名称上很难直观的对算法有个认识,要说动态规划,还得从分治法说起。
分类
动态规划是一种非常常见的算法,但是在学习算法很久以后才理解什么是动态规划,因为动态规划实在是“名不符其实”,从名称上很难直观的对算法有个认识,要说动态规划,还得从分治法说起。
现代操作系统都可以同时运行若干进程,对于单核CPU,给定时刻只会有一个进程运行,CPU快速的在各个进程中切换,给用户以多个进程同时运行的错觉,对于多核CPU,可以真正并发运行多个进程,取决于CPU的数目。
Linux 是非常出色的操作系统,通过阅读内核源码,能够清楚的理解现代操作系统的构架和任意细节,但 Linux 内核代码非常庞大,而且有很多与硬件相关的细节,阅读代码有些吃力,不过只要了解内核代码的构架,可对自己迷惑的部分单独分析。
Linux 文件系统有着复杂的结构,仅仅概念就有file,dentry,inode,vfsmount,super_block等等,还有他们之间的关联,细节虽然繁多,但只要抓住主干框架,其他的细节通过阅读源码都可顺利成章的理解。这里Linux …
中断和异常的定义 中断和异常其实都属于中断,中断分为同步中断和异步中断,同步中断指处理器发生的异常,如除0错误;异步中断指CPU外部事件引发,如IO设备中断,因为中断可以发生在任何时刻,与当前CPU时钟周期没有任何关系。
在程序中打印变量地址时,往往再不同的程序中都可能打印相同的地址,显然他们并不是占用相同的物理空间,他们之所以地址相同,得益于内核提供的虚拟地址空间的机制。
UML调试Linux内核 最近看了些Linux内核源码,之前认为最好的调试内核源码最好的方式使用Qemu虚拟机,结合GDB调试,虽然在网上也看到一些这种调试方式的弊端,但感觉虚拟机支持调试是最完美的事情,虽然Bochs更为灵活甚至内置调试器 …
slab 介绍 内存分配与释放向来是程序设计中的难点,在C语言中有malloc可以方便使用,但还是有更多的针对具体业务的实现。内存分配需要考虑分配效率和内存使用率的平衡,当用户申请一块内存,程序需要在空闲内存中查找合适的内存块返回,这里可以 …
内核链表 Linux内核有一些基本的数据结构,这些数据结构是Linux实现的基础,对于链表相信大家都不陌生,但是Linux内核中的链表与平常平常我们所使用的链表略有不同,第一次遇到或许会感到困惑。
操作系统管理软硬件资源,用户进程只能直接或间接的通过系统调用访问系统资源,而用户进程与内核运行于不同的权限空间,需要进行用户态到内核态的转变,这一转变是通过系统中断实现。现以getpid为例: