精华内容
下载资源
问答
  • 内核对象由进程创建,生成在内核空间中,然后在进程的内核句柄表中获得一条记录,该记录包括了句柄和内核对象的属性值。每当内核对象被进程申请拥有时,该内核对象的使用记录会增加1,我猜该使用记录由操作系统维护

    内核对象的本质

    内核对象存在于内核空间中,它是一片内存,由内核句柄来标识它。

    内核对象通常有哪些

    互斥量、信号量等

    内核对象的作用

    通常用来同步进程或者线程

    内核对象的创建、使用和消亡

    内核对象由进程创建,生成在内核空间中,然后在进程的内核句柄表中获得一条记录,该记录包括了句柄和内核对象的属性值。每当内核对象被进程申请拥有时,该内核对象的使用记录会增加1,我猜该使用记录由操作系统维护。当使用记录为0时,内核对象会被释放。当进程调用CloseHandle时,会清除自己的内核句柄表中的相应记录,然后使用记录会减1。

    用内核对象同步多进程

    我在项目中,遇到一个需求是要求程序一次只能运行一个实例。所以用CreateMutex创建一个互斥量,当该互斥量没有被生成时,则运行该程序,如果该程序已经存在了,那么就立即退出,不生成另一个实例。这其实并不难,难在项目有另一个需求,需要从后台服务程序启动前台程序,如果前台程序已经启动,那么就不必生成另一个进程,转而通知该进程执行某种操作。所以用就要用互斥量来同步,这可以用两种方法,第一用CreateMutex,或者OpenMutex,两种都行。但是肯定有优劣。

    展开全文
  • 进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。 硬件工作的模拟: 中央处理器的模拟 用函数CPU( )(该函数不能有参数)模拟中央处理器。 该函数主要负责解释“可执行文件...
  • 基于tmpfsmmap系统调用过程 2

    千次阅读 2014-09-17 18:17:26
    前面一篇blog:mmap那些事之android property实现,讲述了android的属性系统是基于tmpfs的mmap来实现内存的共享,只是论述了应用层的使用,并未涉及到内核空间是怎么处理的。 包括如下几个问题: mmap系统调用过程...
    前面一篇blog:mmap那些事之android property实现,讲述了android的属性系统是基于tmpfs的mmap来实现内存的共享,只是论述了应用层的使用,并未涉及到内核空间是怎么处理的。
    
    包括如下几个问题:
    mmap系统调用过程
    tmpfs文件针对mmap做了哪些处理?这里包括tmpfs是怎样分配实际的物理内存到共享内存的,然后其他应用进程映射到这个tmpfs的文件时,又是怎么取得这个共享物理内存的,并且又是怎么建立到自己所属进程的地址空间映射页表的)

    mmap的系统调用过程

    首先简单说明下mmap的系统调用过程:

    do_mmap是应用空间mmap调用在内核空间入口,该函数前面只是做了些参数的合法性检查,在这里addr一般为0,如果不为0,则说明应用空间希望内核使用该地址作为虚拟地址的开始地址,但实际返回的地址是由当前进程的地址空间使用情况决定的,所以返回值并不一定是用户希望的addr的值,应用空间应用使用mmap系统嗲用返回的addr值。len参数指定映射的虚拟内存的长度。我们直接转到do_mmap_pgoff函数:   
                                   ............

                                   ............

    上面的line998 addr参数就是linux mm系统自动为我们分配的这段映射内存的开始虚拟地址
    mmap_region函数主要做如下几件事情:
    首先将[addr,addr+len]的这段虚拟地址空间的之前的映射拆除掉。

    其次将[addr,addr+len]这段地址范围跟相邻的wma进行合并

    如果不能合并,则分配新的wma结构体来管理[addr,addr+len]这段地址范围

    最重要的地方出现了,如下图高亮部分,执行该映射文件句柄对应的mmap操作函数,该函数是需要支持mmap系统调用的驱动来实现的。file_operations中的mmap操作函数的实现方法有两种典型实现,ldd3的参考书籍上有详细的描述和实例,在这里,我们发现op->mmap的函数原型跟系统调用的mmap函数原型已经简化多了,因为linux的mm子系统已经为我们做了大部分事情,譬如已经为我们找到了一块合适的虚拟内存空间(vma数据结构体来表示)来为映射具体的物理内存空间做准备,并且在调用了驱动中的mmap函数后,将这个vma结构体连接到当前进程的mm结构体中。

    最后,将vma数据结构连接到所属进程的mm内存管理数据结构中, 

    tmpfs对mmap调用的支持

    现在回到我们的主菜,即android上层在调用open创建一个文件:/dev/__properties__,接着针对该文件执行mmap系统调用,这个时候内存做了些什么事情?

    他们为什么选择在/dev目录下,而不是其他目录,譬如/data目录下创建并映射这个文件可以吗?
    带着这些问题,开始我们的内核之旅:

    在linux控制台执行mount命令:

    如上图的黑色高亮部分显示的,/dev/目录下的文件对应的都是tmpfs文件。所以我们的讨论得从tmpfs开始。linux内核部分,tmpfs文件系统的实现时在trunk/mm/shmem.c文件中。在这里限于篇幅,我就不展开说,一个linux内核是如何实现并注册一个文件系统的。

    tmpfs的open调用流程

    android上层通过调用:fd = open("/dev/__properties__", O_RDWR | O_CREAT, 0600);语句来创建一个tmpfs的文件:/dev/__properties__,该文件由于是首次打开,所以打开的时候就会创建它,见内核的open调用中的如下过程:

    line2259 判断该文件不存在,则在line2281处调用vfs_create来创建目录dir下的对应于dentry的文件。



    由于对应于tmpfs文件系统,所以line2074对应的i_op结构体就是:

    所以就调用static int shmem_create(struct inode *dir, struct dentry *dentry, umode_t mode,struct nameidata *nd)函数来创建对应于/dev/__properties__的文件,在执行这个函数时,参数dir对应的目录名称应该是dev,参数dentry目录项对应的文件名字应该就是__properties__。以上函数最终调用如下函数:


    继续展开shmem_get_inode函数


    至此,在应用层调用open函数,tmpfs主要是通过shmem_create函数来在/dev/目录下,创建一个__properties__文件,主要是生成该文件对应的inode节点,并且初始化该inode节点,并将该节点跟dentry关联起来,最终会将这个两个重要成员填充到 struct file结构体成员中,并返回对应的文件句柄。

    tmpfs的mmap调用过程

    至此android应用在获取到open返回的文件句柄后,调用如下函数来将共享内存映射到自己的进程地址空间:
    data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    该应用层的mmap系统调用在经历上述描述的mmap内核通用层的调用历程后,会掉到驱动中的mmap的实现,在这里的就是上面line1151种的shmem_file_operations结构体中的mmap成员函数:


    针对struct file_operations操作中的mmap的实现,ldd3中有详细的描述,概括的将分为两种实现方式:
    一种是通过调用remap_pfn_range事先就将虚拟到物理地址的映射表建立好,此种方法在mmap调用完后,虚拟到物理映射的页表已经建立好了。
    一种是通过nopage的方式来实现。这方式,其实在调用完mmap后,虚地到物理地址的映射还没建立,而是在应用具体到访问到这个虚地址时,会产生page fault错误,在缺页处理中,会调用nopage获得虚拟地址对应的物理地址,并将对应的虚拟到物理的映射表建立好。
    而tmpfs的mmap的实现是使用的第二种方法:


    line1058 最终会调用shmem_getpage_gfp函数,展开如下:

    继续上面的函数,省略部分不相关的代码


    继续上面的函数,省略部分不相关的代码




    结合上面代码中的注释,应该不难理解这个共享物理内存页的分配及管理。
    最后回到我们开始提出的几个问题:
    使用mmap实现内存共享的话,如果不想自己专门实现驱动层的mmap函数,则应该使用tmpfs提供的共享内存机制,所以必须要创建在基于tmpfs的文件系统中,至于文件叫什么名字都不重要
    像之前举例的data分区,由于不是tmpfs文件系统,而是yaffs2文件系统,所以是不能用来实现内存共享的。
    android属性系统对应的共享内存所对应的物理内存页都是由init进程分配的,并且挂在/dev/__properties__文件对应的file->f_path.dentry.d_inode->i_mapping中的平衡二叉树中。
    所有其他以只读方式mmap这个/dev/__properties__文件的,则会去将init进程分配的物理内存页映射到自己的进程的地址空间,从而实现物理内存在多个进程间的共享。
    展开全文
  • 2021-05-29

    2021-05-29 20:15:05
    物理存储结构(包括哪些文件,各自作用是什么),逻辑存储结构(组成及其关系),Oracle的进程结构(包括哪些,各自作用),Oracle内存结构,数据字典 例如: ①请简述Oracle数据库保存在物理介质上文件有哪些,...

    Oracle期末复习

    第一章

    关系数据模型:

    理解超键,候选键,主键,外键

    范式理论:

    第一范式:最重要特点就是实体属性不可再分,简单来说就是列不可再分
    第二范式:
    第三范式:

    第二章

    基本概念:

    物理存储结构(包括哪些文件,各自作用是什么),逻辑存储结构(组成及其关系),Oracle的进程结构(包括哪些,各自作用),Oracle的内存结构,数据字典
    例如:
    ①请简述Oracle数据库保存在物理介质上的文件有哪些,其作用是什么?。
    ②分析Oracle的逻辑存储结构的组成。
    ③掌握只有写入文件中的数据才是持久保留的,而存储在缓冲区的数据都有可能会丢失,例如当系统突然掉电时,日志文件的内容不会丢失,而所有缓冲区内的数据都会丢失。
    ④掌握DBWn进程负责将数据缓冲区内的数据写入到数据文件,LGWR进程将日志缓冲区中的日志数据写入磁盘的日志文件
    关于数据字典要掌握以下知识点:(1)数据字典是由Oracle自动创建并更新的一组表(2)数据字典的所有者为sys用户(3)数据字典只可以读(4) 数据字典提供了数据库结构、数据库对象空间分配和数据库用户等有关信息。
    ⑥ 熟记几个常用的数据字典,例如对于创建好的表,如果想要了解其信息,可以查询数据字典dba_tables,如果要查询当前用户所创建的存储过程,可以查询数据字典user_source。

    select table_name ,tablespace_name,owner
    from dba_tables
    where owner='scott';
    

    第三章

    掌握SQL*Plus的基本命令,describe、save、get、start、edit、spool
    使用SQLPLUS (describe)命令可以显示表结构的信息
    使用SQLPLUS 的(get)命令可以将文件的内容调入缓冲区,并且不执行
    使用SQL*PLUS 的(save)命令可以将缓冲区的内容保存到指定文件中

    展开全文
  • 11、EJB是基于哪些技术实现?并说出SessionBean和EntityBean区别,StatefulBean和StatelessBean区别。 EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。 SessionBean...
  • 修改线程栈大小

    2018-03-01 15:02:02
    今天我们要讲的栈大小就是创建的线程的属性之一,在pthread_attr_t 结构体中,都保存着一些缺省值,如果我们没有对其进行修改,则以缺省值进行存储 如图:属性值结果scopePTHREAD_SCOPE_PROCESS新线程与进程中的其他...

    首先,我们需要明白,我们在创建线程的时候,线程是有属性的,那么都包括哪些属性呢?

    今天我们要讲的栈大小就是创建的线程的属性之一,在pthread_attr_t 结构体中,都保存着一些缺省值,如果我们没有对其进行修改,则以缺省值进行存储

    如图:

    属性结果
    scopePTHREAD_SCOPE_PROCESS新线程与进程中的其他线程发生竞争。
    detachstatePTHREAD_CREATE_JOINABLE线程退出后,保留完成状态和线程ID。
    stackaddrNULL新线程具有系统分配的栈地址。
    stacksize0新线程具有系统定义的栈大小。
    priority0新线程的优先级为0。
    inheritschedPTHREAD_EXPLICIT_SCHED新线程不继承父线程调度优先级。
    schedpolicySCHED_OTHER新线程对同步对象争用使用Solaris 定义的固定优先级。线程将一直运行,直到被抢占或者直到线程阻塞或停止为止。

    修改栈大小请看下面代码

    pthread_attr_t attr;

    struct sched_param param;

    pthread_attr_init(&attr);

    pthread_attr_setstacksize (&attr, 16*1024*1024);//修改栈大小为16M

    //线程优先级

    pthread_attr_getschedparam(&attr, &param);
    param.sched_priority += 5;

    pthread_attr_setschedparam(&attr, &param);


    展开全文
  • Depends用来显示与一个可执行文件(exe或者dll)相关依赖项(动态链接库dll),以及该...使用 Spy++ 可以执行下列操作: 显示系统对象(包括进程、线程和窗口)之间关系图形树,搜索指定窗口、线程、进程或消息.
  • 与cgi区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...
  • LINGO软件学习

    2009-08-08 22:36:50
    LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,...对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性...
  • OS实验报告.docx

    2020-06-19 15:14:32
    (5)考虑两个处理机,考虑同步进程的处理机分配问题,每次调度后,显示各进程状态,运行进程要显示在哪个处理机上执行。 (6)规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度...
  • 1. 所有进程的枚举(包括内核中隐藏的进程) 2. 所有文件的枚举(包括内核中隐藏的文件) 3. 进程中所有模块的枚举(包括内核中隐藏的模块) 4. 进程的强制结束 5. 进程中模块的强制卸载 6. 模块被哪些进程加载的...
  • 2021年最新总结,阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。持续更新中。...4.5.9 讲讲Spring事务传播属性。 4.6.0 Spring如何管理事务。 4.6.1 Spring怎么配置事务...
  • vfp6.0系统免费下载

    2009-09-17 13:49:13
    另外还加入了一些新的属性,如表单的 ScrollBars 和 TitleBar 属性,以便包容到 Internet Explorer 中时可以与其用户界面标准保持一致。 应该注意,在 Internet Explorer 所运行的 Visual FoxPro ActiveDoc 只是一...
  • java 面试题 总结

    2009-09-16 08:45:34
    1、面向对象特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关那些方面,以便更充分地注意与当前目标有关方面。抽象并不打算了解全部问题,而只是选择其中一部分,暂时不用部分细节。抽象包括...
  • 面向对象开发方法包括面向对象分析、面向对象设计和面向对象程序设计。( √) 7. 软件危机主要表现是软件需求量迅速增加,软件价格上升。(×) 8. 软件工具作用是为了延长软件产品寿命。(×) 9. ...
  • 4、表征操作系统的属性 主要有:响应比,并发性,信息的共享、保密与保护,可扩充性、可移植性、可读性、可“生成”性,安全可靠性,可测试性等。 第二章 用户与操作系统的接口 1、基本概念 作业...
  • 管理者可以通过查看历史监控记录,了解员工曾经做过什么,从员工邮件记录(包括对Web网页邮件、FOXMAIL、OUTLOOK等邮箱进行监控)、聊天记录(支持包括QQ、MSN、阿里旺旺、SKYPE以及飞信等国内外常用18种聊天...
  • 其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及...
  • 6、程序、进程、线程之间关系 57 7、创建线程有几种方式,分别是什么? 58 8、线程生命周期 59 9、线程currentThread()与interrupt()方法使用 59 10、线程状态 59 启动线程方式?start or run? 59 11、什么...
  • 电脑蓝屏对照码

    2019-05-05 14:16:40
    第三步:右击C:\winnt\system32\drivers\fastfat.sys文件并选择"属性", 查看其版本是否与当前系统所使用Windows版本相符.(注:如果是XP, 应该是C:\windows\system32 \drivers\fastfat.sys) 第四步:安装最新主板...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 中文API支持库(1.0-0

    2009-04-17 08:28:19
    _回应消息() 如将消息传送给位于不同进程的一个窗口,通常第一个进程会暂时挂起,直到另一个进程中的窗口函数完成操作为止。在目标进程的窗口函数完成之前,另一个进程可用这个函数向第一个进程返回一个结果,使之能...
  • IIS6.0 IIS,互联网信息服务

    热门讨论 2010-08-23 21:20:55
    (2)再依次选“默认Web站点→右键→属性→Web站点”,单击“IP地址”右侧“高级”按钮,在“此站点有多个标识下”双击已有那个IP地址(或单击选中它后再按“编辑”按钮),然后在“主机头名”下输入...
  • 状态存储使用属性最大化,投资属性最小化。须要避免出现用户大量囤积存储资源,提高资源利用率。 EOS使用【RAM】来解决状态收费问题。开发者须要使用代币向系统合约购买RAM,存储状态数据须要消耗对应大小RAM...
  • 我挣扎着找出哪些对象在特定情况下使用,如何获取有关属性和方法信息,以及如何实现VBScript或JScript脚本。我第一个脚本调试是一个痛苦过程。 1 WSH报道大多是神秘运行时错误消息行X或者脚本根本没有做...
  • WIN XP蓝屏代码大全

    2013-08-08 12:29:21
    第三步:右击C:\winnt\system32\drivers\fastfat.sys文件并选择"属性", 查看其版本是否与当前系统所使用Windows版本相符.(注:如果是XP, 应该是C:\windows\system32 \drivers\fastfat.sys) 第四步:安装最新主板...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    34.EJB规范规定EJB中禁止操作有哪些? 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例方式? 37.classloader中,JDKAPI、...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

进程的属性包括哪些