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

企业网站psd模板宏宇网站建设

企业网站psd模板,宏宇网站建设,昆明做网站优化价格,网络营销方式有些什么接前一篇文章#xff1a;Linux内核与驱动面试经典“小”问题集锦#xff08;4#xff09; 问题6 问#xff1a;mutex_lock和mutex_lock_interruptible的区别是什么#xff1f; 备注#xff1a;此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答#xff1a; 尽管…接前一篇文章Linux内核与驱动面试经典“小”问题集锦4 问题6 问mutex_lock和mutex_lock_interruptible的区别是什么 备注此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答 尽管信号量已经可以实现互斥的功能但是在Linux内核中还是真实存在着“正宗”的互斥机制——mutex。 以下3个函数用于获取互斥体均在kernel/locking/mutex.c中 mutex_lock void __sched mutex_lock(struct mutex *lock) {might_sleep();if (!__mutex_trylock_fast(lock))__mutex_lock_slowpath(lock); } EXPORT_SYMBOL(mutex_lock); mutex_lock_interruptible int __sched mutex_lock_interruptible(struct mutex *lock) {might_sleep();if (__mutex_trylock_fast(lock))return 0;return __mutex_lock_interruptible_slowpath(lock); }EXPORT_SYMBOL(mutex_lock_interruptible); mutex_trylock int __sched mutex_trylock(struct mutex *lock) {bool locked;MUTEX_WARN_ON(lock-magic ! lock);locked __mutex_trylock(lock);if (locked)mutex_acquire(lock-dep_map, 0, 1, _RET_IP_);return locked; } EXPORT_SYMBOL(mutex_trylock); mutex_lock()与mutex_lock_interruptible()的不同之处为前者引起的睡眠不能被信号打断而后者则可以被打断。mutex_trylock()则用于尝试获得mutex获取不到mutex时不会引起进程睡眠。 mutex的使用方法和信号量用于互斥的场合完全一样。 参考资料 《Linux设备驱动开发详解 —— 基于最新的Linux 4.0内核》 宋宝华 编著机械工业出版社 问题7 问如何分配内存时指定其不被释放 备注此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答 一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面但是有时候我们需要锁住一些物理页面防止其被回收如时间有严格要求的应用Linux中提供了mlock相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。 在Linux中可以使用mlock函数来防止特定区域的内存被操作系统自动回收。 mlock是一个系统调用用于将指定的内存区域锁定在物理内存中防止其被交换到磁盘上。当内存区域被锁定时操作系统将保证该区域的数据始终在物理内存中从而提高访问速度和安全性。 mlock函数的原型如下 #include sys/mman.h int mlock(const void *addr, size_t len); 参数说明 addr指向要锁定的内存区域的起始地址。 len要锁定的内存区域的长度以字节为单位。 返回值 mlock函数成功时返回0失败时返回-1并设置errno来指示错误类型。 注意mlock函数需要特权权限才能使用通常只有root用户或具有CAP_IPC_LOCK权限的用户才能调用该函数。 实例 下面是一个示例代码展示如何使用mlock函数将指定的内存段进行锁定 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include stdlib.h #include string.hint main() {char *buffer (char *)malloc(1024); // 分配一个大小为 1KB 的内存空间if (mlock((void*) buffer, sizeof(buffer)) -1) {perror(Failed to lock memory);exit(-1);} else {printf(Memory locked successfully\n);// 这里可以对已经锁定的内存进行读写等操作munlock((void*) buffer, sizeof(buffer)); // 解除内存锁定free(buffer); // 释放内存空间}return 0; }上述代码 1首先通过mlock函数分配了一个大小为1KB的内存空间 2然后调用mlock()函数将其锁定 3接着可以对已经锁定的内存进行读写等操作 4最后通过munlock函数解除内存锁定并释放相应的内存空间。 mlock函数在以下情况下常常被使用 对于需要频繁访问的敏感数据可以使用mlock来确保其始终在物理内存中避免因为内存交换而导致的性能下降。对于包含敏感信息的内存区域可以使用mlock来防止其被交换到磁盘上提高数据的安全性。 底层机制 mlock处理路径中会将VM_LOCKED标志加入到vma-vm_flags中由于设置的地址区域有可能跨越多个vma所以代码中会涉及到分裂和合并的操作实质上都会设置相关的vma-vm_flags的VM_LOCKED标志。然后会调用__mm_populate来填充虚拟页对应的物理页最终在faultin_page函数中试图查找vma中的每个虚拟页对应的物理页面对应于follow_page_mask函数。如果没有找到会调用handle_mm_fault主动触发缺页处理。handle_mm_fault函数是内核通用的缺页异常处理例程如vma是匿名映射则分配物理页面然后建立页表映射关系若vma是文件映射则会从磁盘读取对应的文件页如果page cache没有对应页面时到内存的page cache然后建立虚拟页面建立页表映射关系。 对于一些对时间有严格要求的应用场景访问时按需分配和调页机制的时延可能是未知的内核中提供了mlock相关的系统调用用于将虚拟内存区域对应的物理页面“锁在”内存中。内核对应mlock锁住的页面实际上它主要做了两步比较重要的操作1调用mlock的时候就将所需要的物理页面准备好2内存回收时当扫描到相关的物理页面时将其放入不可回收的lru链表。第一步保证访问的虚拟地址对应的物理页面在内存中第二步保证了锁住的页面不会被回收。 参考资料 一文剖析mlock锁原理
http://www.yayakq.cn/news/1882/

相关文章:

  • 一个企业网站多少钱网站制作代码
  • 网站 优化 分析钢格板保定网站建设
  • 免费开源门户网站系统wordpress代码语言
  • 电脑系统优化软件十大排名什么是优化产业结构
  • 什么网站做企业邮箱服务器百度地图 企业网站
  • 伤豆丁文库网站开发课程推广
  • 企业合同管理系统seo发外链网站
  • win7电脑做网站主机软件开发培训学校哪家比较好
  • 西安网站开发高端网站开发网站开发技术试验教程
  • 网站建设空间主机的选择苏州网络公司建网站
  • 毕业设计做网站教程济南网站建设首推企优互联不错
  • 重庆开网站最优做网站
  • 网站记录登录账号怎么做烟店网站建设
  • 制作网站需要哪些技术wordpress代刷网
  • 自己做视频网站可以吗宁夏人脸识别门禁
  • 哪个做网站公司浙江交工宏途交通建设有限公司网站
  • 做网站一般用什么配置的电脑做网站背景图片要多大
  • 网站美化工具wordpress 签到
  • 如何评价网站是否做的好处移动网站开发书籍
  • 新手做网站选材跨境电商亚马逊开店流程
  • 网站设置受信任遵义县住房和城乡建设局网站
  • 做花生的网站学做卤味视频网站
  • 网站后台更新为什么前台不现实专业沈阳网站制作
  • 建设一个网站需要多少费用wordpress必须关注公众号
  • 网站怎样设计网页中信建设公司好进去吗
  • 没有网站做APP网站建设丶金手指下拉14
  • 网络建站wordpress特别卡 iis
  • 天津市建行网站易站通这个网站怎么做
  • 购买建立网站费怎么做会计凭证网站怎么优化自己免费
  • 网站开发技术分析宁波seo搜索排名优化