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

备案不关闭网站的方法设计师之家资源库

备案不关闭网站的方法,设计师之家资源库,英文版网站建站要求,企业网站需要的模块一、對於休眠(suspend)的簡單介紹 在Linux中,休眠主要分三個主要的步驟: 1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下…一、對於休眠(suspend)的簡單介紹   在Linux中,休眠主要分三個主要的步驟:   1) 凍結用戶態進程和內核態任務2) 調用注冊的設備的suspend的回調函數, 順序是按照注冊順序3) 休眠核心設備和使CPU進入休眠態, 凍結進程是內核把進程列表中所有的進程的狀態都設置為停止,並且保存下所有進程的上下文. 當這些進程被解凍的時候,他們是不知道自己被凍結過的,只是簡單的繼續執行。如何讓Linux進入休眠呢?用戶可以通過讀寫sys文件/sys /power/state 是實現控制系統進入休眠. 比如# echo mem /sys/power/state命令系統進入休眠. 也可以使用# cat /sys/power/state來得到內核支持哪幾種休眠方式.二、Linux Suspend 的流程1. 相關代碼• kernel/kernel/power/main.c• kernel/arch/arm/mach-xxx/pm.c• kernel/driver/base/power/main.c接下來讓我們詳細的看一下Linux是怎么休眠/喚醒的:用戶對於/sys/power/state 的讀寫會調用到 kernel/kernel/power/main.c中的state_store() 用戶可以寫入 const char * const pm_states[] 中定義的字符串 比如mem, standby。const char *const pm_states[PM_SUSPEND_MAX] {#ifdef CONFIG_EARLYSUSPEND[PM_SUSPEND_ON]   on,#endif[PM_SUSPEND_STANDBY]  standby,[PM_SUSPEND_MEM]  mem,};常見有standby(suspend to RAM)、mem(suspend to RAM)和disk(suspend to disk)只是standby耗電更多返回到正常工作狀態的時間更短。然后state_store()會調用enter_state()它首先會檢查一些狀態參數然后同步文件系統。/***  enter_state - Do common work of entering low-power state.*  state:     pm_state structure for state were entering.**  Make sure were the only ones trying to enter a sleep state. Fail*  if someone has beat us to it, since we dont want anything weird to*  happen when we wake up.*  Then, do the setup for suspend, enter the state, and cleaup (after*  weve woken up).*/intenter_state(suspend_state_t state){interror;if(!valid_state(state))return-ENODEV;if(!mutex_trylock(pm_mutex))return-EBUSY;#ifdef CONFIG_SUSPEND_SYNC_WORKQUEUEsuspend_sys_sync_queue();#elseprintk(KERN_INFO PM: Syncing filesystems ... );sys_sync();printk(done.\n);#endifpr_debug(PM: Preparing system for %s sleep\n, pm_states[state]);error  suspend_prepare();if(error)gotoUnlock;if(suspend_test(TEST_FREEZER))gotoFinish;pr_debug(PM: Entering %s sleep\n, pm_states[state]);pm_restrict_gfp_mask();error  suspend_devices_and_enter(state);pm_restore_gfp_mask();Finish:pr_debug(PM: Finishing wakeup.\n);suspend_finish();Unlock:mutex_unlock(pm_mutex);returnerror;}2. 准備, 凍結進程       當進入到suspend_prepare()中以后 它會給suspend分配一個虛擬終端來輸出信息 然后廣播一個系統要進入suspend的Notify 關閉掉用戶態的helper進程 然后一次調用suspend_freeze_processes()凍結所有的進程 這里會保存所有進程當前的狀態 也許有一些進程會拒絕進入凍結狀態 當有這樣的進程存在的時候 會導致凍結失敗,此函數就會放棄凍結進程並且解凍剛才凍結的所有進程。/***  suspend_prepare - Do prep work before entering low-power state.**  This is common code that is called for each state that were entering.*  Run suspend notifiers, allocate a console and stop all processes.*/staticintsuspend_prepare(void){interror;if(!suspend_ops || !suspend_ops-enter)return-EPERM;pm_prepare_console();error  pm_notifier_call_chain(PM_SUSPEND_PREPARE);if(error)gotoFinish;error  usermodehelper_disable();if(error)gotoFinish;error  suspend_freeze_processes();if(!error)return0;suspend_thaw_processes();usermodehelper_enable();Finish:pm_notifier_call_chain(PM_POST_SUSPEND);pm_restore_console();returnerror;}3. 讓外設進入休眠        現在, 所有的進程(也包括workqueue/kthread) 都已經停止了內核態人物有可能在停止的時候握有一些信號量 所以如果這時候在外設里面去解鎖這個信號量有可能會發生死鎖所以在外設的suspend()函數里面作lock/unlock鎖要非常小心這里建議設計的時候就不要在suspend()里面等待鎖。而且因為suspend的時候有一些Log是無法輸出的所以一旦出現問題,非常難調試。然后kernel在這里會嘗試釋放一些內存。最后會調用suspend_devices_and_enter()來把所有的外設休眠 在這個函數中 如果平台注冊了suspend_ops(通常是在板級定義中定義和注冊在kernel/arch/arm/mach-xx/pm.c中調用suspend_set_ops) 這里就會調用 suspend_ops-begin() 然后調用dpm_suspend_start他們會依次調用驅動的suspend() 回調來休眠掉所有的設備。當所有的設備休眠以后 suspend_ops-prepare()會被調用 這個函數通常會作一些准備工作來讓板機進入休眠。 接下來Linux在多核的CPU中的非啟動CPU會被關掉通過注釋看到是避免這些其他的CPU造成race condio接下來的以后只有一個CPU在運行了。suspend_ops 是板級的電源管理操作, 通常注冊在文件 arch/arch/mach-xxx/pm.c 中.接下來 suspend_enter()會被調用 這個函數會關閉arch irq 調用 device_power_down() 它會調用suspend_late()函數 這個函數是系統真正進入休眠最后調用的函數通常會在這個函數中作最后的檢查。 如果檢查沒問題 接下來休眠所有的系統設備和總線並且調用 suspend_pos-enter() 來使CPU進入省電狀態這時就已經休眠了。代碼的執行也就停在這里了。/***  suspend_devices_and_enter - suspend devices and enter the desired system*                  sleep state.*  state:       state to enter*/intsuspend_devices_and_enter(suspend_state_t state){interror;if(!suspend_ops)return-ENOSYS;trace_machine_suspend(state);// 如果平台注冊了suspend_ops(通常是在板級定義中定義和注冊// 在kernel/arch/arm/mach-xx/pm.c中調用suspend_set_ops)// 這里就會調用 suspend_ops-begin()if(suspend_ops-begin) {error  suspend_ops-begin(state);if(error)gotoClose;}suspend_console();suspend_test_start();// 依次調用驅動的suspend() 回調來休眠掉所有的設備。error  dpm_suspend_start(PMSG_SUSPEND);if(error) {printk(KERN_ERR PM: Some devices failed to suspend\n);gotoRecover_platform;}suspend_test_finish(suspend devices);if(suspend_test(TEST_DEVICES))gotoRecover_platform;// 這個函數會關閉arch irq 調用 device_power_down() 它會調用suspend_late()函數// 這個函數是系統真正進入休眠最后調用的函數通常會在這個函數中作最后的檢查。// 如果檢查沒問題 接下來休眠所有的系統設備和總線並且調用 suspend_pos-enter()// 來使CPU進入省電狀態這時就已經休眠了。代碼的執行也就停在這里了。error  suspend_enter(state);Resume_devices:suspend_test_start();dpm_resume_end(PMSG_RESUME);suspend_test_finish(resume devices);resume_console();Close:if(suspend_ops-end)suspend_ops-end();trace_machine_suspend(PWR_EVENT_EXIT);returnerror;Recover_platform:if(suspend_ops-recover)suspend_ops-recover();gotoResume_devices;}三、Linux Resume流程如果在休眠中系統被中斷或者其他事件喚醒接下來的代碼就會開始執行這個喚醒的順序是和休眠的循序相反的所以系統設備和總線會首先喚醒使能系統中斷使能休眠時候停止掉的非啟動CPU 以及調用suspend_ops-finish() 而且在suspend_devices_and_enter()函數中也會繼續喚醒每個設備使能虛擬終端 最后調用 suspend_ops-end()。在返回到enter_state()函數中的當 suspend_devices_and_enter() 返回以后外設已經喚醒了但是進程和任務都還是凍結狀態 這里會調用suspend_finish()來解凍這些進程和任務 而且發出Notify來表示系統已經從suspend狀態退出 喚醒終端。到這里所有的休眠和喚醒就已經完畢了系統繼續運行了。
http://www.pierceye.com/news/125611/

相关文章:

  • 邓州企业网站艺术设计方案
  • 广州市住房住建局网站永久免费的云电脑
  • 建设网站后如何上线不用服务器做网站
  • 建站服务论坛国外做外贸哪个网站好些
  • 营销型网站试运营调忧仿别人网站
  • 低价网站制作企业云南网站开发公司
  • 成都市建设厅网站查询十九冶成都建设有限公司网站
  • 建电商网站要多少钱建设绿色食品网站
  • 建行个人网上登录入口优化网站结构一般包括
  • 好看的网站页面WordPress知更鸟主题怎样安装
  • 如何查网站是否备案免费建网站代码
  • 曲沃网站开发新注册的公司怎么做网站
  • 企业网站无线端怎么做塑胶科技东莞网站建设
  • 图片发到哪些网站 seo阜沙网站建设
  • 企业开源建站系统大连百度首页优化
  • 通辽做网站有没有智慧软文发稿平台
  • 网站别人做的我自己怎么续费福州网站建站公司
  • 青岛高端网站开发wordpress修改logo地址
  • 做网站实名认证有什么用青岛网站建设运营
  • 大数据分析网站做汽车保养的网站上
  • 网站开发费用一般是多少怎么建设宣传网站
  • 做网站的背景怎么做ps免费模板网站
  • 为什么要建设应急管理网站sketch做网站
  • 做的网站在百度上搜不出来的宁波关键词优化平台
  • 哪里有手机网站建设公司有道网站收录提交入口
  • 赣州网站建设较好的公司贵州网站建设hsyunso
  • 网站建设和管理是教什么科目鹤壁网站建设鹤壁
  • 网站域名和邮箱域名解析国外网站国内做二维码
  • 万万州州微微网站网站建建设设福州建设网站效果图
  • 长安网站建设详细教程鸿科经纬教网店运营推广