色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

論述不同的搶占模型如何影響用戶和系統(tǒng)的行為

Linux閱碼場 ? 來源:Linuxer ? 2020-06-03 16:03 ? 次閱讀

當配置Linux內核的時候,我們可以選擇一些參數,這些參數能影響系統(tǒng)的行為。你可以用不同的優(yōu)先級、調度類和搶占模型來工作。正確地選擇這些參數是非常重要的。

本文將論述不同的搶占模型如何影響用戶和系統(tǒng)的行為。

當你使用 make menuconfig配置內核的時候,你能看到這樣的菜單:

為了深入理解這三個搶占模型的區(qū)別,我們將寫一個案例:

2個線程,一個高優(yōu)先級RT(50),一個低優(yōu)先級RT(30)

高優(yōu)先級的線程要睡眠3秒

低優(yōu)先級的線程用CPU來做計算

3秒后高優(yōu)先級線程喚醒。

如果低優(yōu)先級的線程陷入系統(tǒng)調用,高優(yōu)先級的線程睡眠到期,究竟會發(fā)生什么?下面我們來一種模型一種模型地看。

No Forced Preemption

這種情況下,上下文切換發(fā)生在系統(tǒng)調用返回用戶空間的點。案例如下:

2個線程,一個高優(yōu)先級RT(50),一個低優(yōu)先級RT(30)

高優(yōu)先級的線程要睡眠3秒

低優(yōu)先級的線程進入系統(tǒng)調用計算5秒

5秒后低優(yōu)先級線程從內核系統(tǒng)調用返回

高優(yōu)先級線程將醒來(但是比預期遲了2秒)。

內核代碼,簡單的字符設備:

#include #include #include #include #include #include #include #include #include #include #include #include static dev_t my_dev;static struct cdev *my_cdev; // callback for read system call on the devicestatic ssize_t my_read(struct file *file, char __user *buf,size_t count,loff_t *ppos){ int len=5; if(*ppos > 0) { return 0; } mdelay(5000); // busy-wait for 5 seconds if (copy_to_user(buf , "hello" , len)) { return -EFAULT; } else { *ppos +=len; return len; }} static struct file_operations my_fops ={ .owner = THIS_MODULE, .read = my_read,}; static int hello_init (void){ my_dev = MKDEV(400,0); register_chrdev_region(my_dev,1,"demo"); my_cdev=cdev_alloc(); if(!my_cdev) { printk (KERN_INFO "cdev alloc error. "); return -1; } my_cdev->ops = &my_fops; my_cdev->owner = THIS_MODULE; if(cdev_add(my_cdev,my_dev,1)) { printk (KERN_INFO "cdev add error. "); return -1; } return 0; } static voidhello_cleanup (void){ cdev_del(my_cdev); unregister_chrdev_region(my_dev, 1);} module_init (hello_init);module_exit (hello_cleanup);MODULE_LICENSE("GPL");

讀里面delay了5秒, 注意mdelay是一個計算型的busy-loop。

用戶空間代碼如下:

#include#include#include#include #include #include void *hi_prio(void *p){ printf("thread1 start time=%ld ",time(NULL)); sleep(3); printf("thread1 stop time=%ld ",time(NULL)); return NULL;} void *low_prio(void *p){ char buf[20]; sleep(1); int fd=open("/dev/demo",O_RDWR); // #mknod /dev/demo c 400 0 puts("thread2 start"); read(fd,buf,20); puts("thread2 stop"); return NULL;} int main(){ pthread_t t1,t2,t3; pthread_attr_t attr; struct sched_param param; pthread_attr_init(&attr); pthread_attr_setschedpolicy(&attr, SCHED_RR); param.sched_priority = 50; pthread_attr_setschedparam(&attr, ¶m); pthread_create(&t1,&attr,hi_prio,NULL); param.sched_priority = 30; pthread_attr_setschedparam(&attr, ¶m); pthread_create(&t2,&attr,low_prio,NULL); sleep(10); puts("end test"); return 0;}

實驗步驟:

高優(yōu)先級線程開始睡眠3秒

低優(yōu)先級線程睡眠1秒然后做系統(tǒng)調用

高優(yōu)先級線程6秒后醒來(stop和start的時間差)

# insmod demo.ko # ./appthread1 start time=182thread2 startthread1 stop time=188thread2 stopend test

Preemptible Kernel

這種情況內核里面也可以搶占,意味著上述程序里面的高優(yōu)先級線程3秒后可醒來。

這種情況下,系統(tǒng)會有更多的上下文切換,但是實時性更加好。對于要求軟實時的嵌入式系統(tǒng)而言,這個選項是最佳的。但是對于服務器而言,通常第一個選項更好——更少的上下文切換,更多的CPU時間用作有用功。

運行結果(stop、start時間差3秒):

# insmod ./demo.ko#./appthread1 start time=234thread2 startthread1 stop time=237thread2 stopend test

Voluntary Kernel Preemption

這種情況和第一種情況"no forced preemption"類似,但是內核開發(fā)者可以在進行復雜操作的時候,時不時檢查一下是否可以reschedule。他們可以調用might_resched()函數。

在下面的代碼中,我們添加了一些檢查點(check point)

// callback for read system call on the devicestatic ssize_t my_read(struct file *file, char __user *buf,size_t count,loff_t *ppos){ int len=5; if(*ppos > 0) { return 0; } mdelay(4000); // busy-wait for 4 seconds might_resched(); delay(3000); // busy wait for 3 seconds if (copy_to_user(buf , "hello" , len)) { return -EFAULT; } else { *ppos +=len; return len; }}

如果我們把might_resched()注釋掉,它會delay 7秒。

添加cond_resched()調用將導致系統(tǒng)檢查是否有高優(yōu)先級的任務被喚醒,這樣高優(yōu)先級任務5秒可以醒來(其中1秒在systemcall之前,另外4秒在kernel)。

運行結果:

#insmod./demo.ko#./appthread1 start time=320thread2 startthread1 stop time=325thread2 stopend test

Full Real Time Preemption

如果我們使能RT補丁,我們會得到一個硬實時的kernel。這意味著任何代碼可以搶占任何人。比如一個更加緊急的任務可以搶占中斷服務程序ISR。這個patch進行了如下改動:

把中斷服務程序轉化為優(yōu)先級是50的RT線程

把softIRQ轉化為優(yōu)先級是49的RT線程

把所有的spinlock變成mutex

高精度定時器

其他的細小改動

打補丁后會看到2個新增的菜單:

其中“Preemptible Kernel (Basic RT)” 是為了調試目的的,為了全面使用RT補丁的功能,我們應該選擇最后一項 – Fully Preemptible Kernel。這樣我們會有更多的上下文切換,但是可以滿足RT的實時要求。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40280
  • Linux
    +關注

    關注

    87

    文章

    11293

    瀏覽量

    209340

原文標題:理解Linux內核搶占模型(最透徹一篇)

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【「大模型啟示錄」閱讀體驗】如何在客服領域應用大模型

    內為企業(yè)帶來效益。在選擇模型時,需要評估其性能表現(xiàn)。這包括模型的準確性、響應速度、對話流暢性、情感理解能力等方面。可以通過對比不同模型的測試結果、查看用戶反饋和評分等方式來評估
    發(fā)表于 12-17 16:53

    基于充電行為模型融合的電動汽車能耗預測及相關體系探究

    安科瑞魯一揚15821697760 摘要:電動汽車能耗預測于車輛路徑規(guī)劃及充電行為頗為關鍵。本研究提出一種融合多模型并考量充電行為的能耗預測法,先構建基于實車少量數據與有限參數的能耗計算模型
    的頭像 發(fā)表于 12-12 14:01 ?161次閱讀
    基于充電<b class='flag-5'>行為</b>多<b class='flag-5'>模型</b>融合的電動汽車能耗預測及相關體系探究

    SPICE模型系列的半導體器件

    半導體器件模型是指描述半導體器件的電、熱、光、磁等器件行為的數學模型。其中,SPICE(Simulation Program with Integrated Circuit Emphasis)
    的頭像 發(fā)表于 10-31 18:11 ?505次閱讀
    SPICE<b class='flag-5'>模型</b>系列的半導體器件

    淺析用戶行為的V2G模式下電動汽車有序充電控制負荷預測研究

    摘要:針對電動汽車充電負荷與運營經濟收益的矛盾問題,以用戶側為研究對象,用戶行為習慣為約束條件,建立粒子群控制策略模型。在保證電動汽車正常使用的情況下,利用粒子群算法計算出的充放電功率
    的頭像 發(fā)表于 10-11 16:16 ?505次閱讀
    淺析<b class='flag-5'>用戶</b><b class='flag-5'>行為</b>的V2G模式下電動汽車有序充電控制負荷預測研究

    基于Simscape Battery模型的電池系統(tǒng)建模與仿真

    Simscape Battery? 以模塊庫和 API的方式幫助我們對電池以及儲能系統(tǒng)進行建模。我們可以用它來實現(xiàn)電芯電熱耦合模型、配置和測試電池架構、設計電池管理系統(tǒng),繼而評估電池系統(tǒng)
    的頭像 發(fā)表于 09-05 09:45 ?785次閱讀
    基于Simscape Battery<b class='flag-5'>模型</b>的電池<b class='flag-5'>系統(tǒng)</b>建模與仿真

    AI行為識別視頻監(jiān)控系統(tǒng) Python

    AI行為識別視頻監(jiān)控系統(tǒng)來自機器視覺技術的革新。機器視覺技術應用是人工智能技術分析的一個支系。它可以在圖形和圖象具體內容敘述中間創(chuàng)建投射關聯(lián),使電腦可以根據圖像處理和剖析比較,進而熟悉視頻圖象中
    的頭像 發(fā)表于 07-06 10:36 ?531次閱讀
    AI<b class='flag-5'>行為</b>識別視頻監(jiān)控<b class='flag-5'>系統(tǒng)</b> Python

    鴻蒙Ability Kit(程序框架服務)【組件啟動規(guī)則(Stage模型)】

    總體規(guī)則 為了保證用戶具有更好的使用體驗,對以下幾種易影響用戶體驗與系統(tǒng)安全的行為做了限制: 后臺應用任意彈框,如各種廣
    的頭像 發(fā)表于 06-10 18:47 ?914次閱讀
    鴻蒙Ability Kit(程序框架服務)【組件啟動規(guī)則(Stage<b class='flag-5'>模型</b>)】

    視頻AI行為監(jiān)測系統(tǒng)在高速公路中應用

    在高速公路的監(jiān)控中,視頻AI行為監(jiān)測系統(tǒng)扮演著至關重要的角色。它利用先進的AI技術,對高速公路上的監(jiān)控視頻進行實時分析,為交通管理部門提供準確、及時的信息,從而提升道路的通行效率,保障交通安全
    的頭像 發(fā)表于 06-05 18:06 ?820次閱讀

    系統(tǒng)中的latency是如何產生的

    在當今數字時代,手機已成為人們日常生活中不可或缺,多任務處理和實時響應對于用戶體驗越來越重要,搶占(preemption)機制在提升系統(tǒng)性能和用戶體驗方面發(fā)揮了至關重要的作用。內核
    的頭像 發(fā)表于 06-04 09:18 ?629次閱讀
    <b class='flag-5'>系統(tǒng)</b>中的latency是如何產生的

    Anthropic修改服務政策:允未成年人使用AI模型,禁AI用于非法行為

    據報道,Anthropic于上周對其服務政策進行了調整,決定自6月6日起允許未成年人使用旗下AI模型的服務,并進一步明確了不得將此AI用于侵犯用戶隱私等不當行為
    的頭像 發(fā)表于 05-13 14:23 ?546次閱讀

    【大語言模型:原理與工程實踐】大語言模型的應用

    ,它通過抽象思考和邏輯推理,協(xié)助我們應對復雜的決策。 相應地,我們設計了兩類任務來檢驗大語言模型的能力。一類是感性的、無需理性能力的任務,類似于人類的系統(tǒng)1,如情感分析和抽取式問答等。大語言模型在這
    發(fā)表于 05-07 17:21

    模型在戰(zhàn)略評估系統(tǒng)中的應用有哪些

    體現(xiàn)在以下幾個方面: 數據整合與分析:大模型具有處理大規(guī)模數據的能力,可以整合來自不同來源、不同格式的戰(zhàn)略數據,如市場趨勢、競爭情報、用戶行為等。 戰(zhàn)略預測與模擬:大模型通過學習和理解
    的頭像 發(fā)表于 04-24 13:48 ?278次閱讀

    RTTnano的用戶main函數中的優(yōu)先級是多少?

    RTTnano 的用戶main函數中的優(yōu)先級是多少?為什么會出現(xiàn)創(chuàng)建新的task之后,main函數會搶占掉低優(yōu)先級的task,例如RT_THREAD_PRIORITY_MAX設置為8 ,低于3
    發(fā)表于 02-26 08:01

    SPICE中的熱模型介紹

    SPICE模型中的熱模型是指用于模擬和預測電子元件在工作時的熱行為特性的模型。這些模型通常與電路仿真軟件一起使用,以便在設計階段評估和優(yōu)化電
    的頭像 發(fā)表于 02-06 11:28 ?1082次閱讀
    SPICE中的熱<b class='flag-5'>模型</b>介紹

    跨電感電壓調節(jié)器(TLVR)的瞬態(tài)行為

    電壓調節(jié)器(TLVR)。TLVR的原理圖來自耦合電感模型,但物理行為不同。事實上,耦合電感的簡單模型通常是可以輕松用于仿真以實現(xiàn)正確波形的東西,但它與實際物理行為并不對應。另一方面,T
    的頭像 發(fā)表于 01-24 09:13 ?2956次閱讀
    跨電感電壓調節(jié)器(TLVR)的瞬態(tài)<b class='flag-5'>行為</b>
    主站蜘蛛池模板: 免费 高清 中文在线观看| 蜜臀亚洲AV永久无码精品老司机| 久久国内精品| 男生插女生下体| 午夜福利合集1000在线| 伊人青青操| 高hnp肉文| 久久伊人精品青青草原2021| 色jie戒电影| 正在播放国产尾随丝袜美女| 高hbl双性浪荡古代| 久久精品中文字幕免费| 色戒在线完整观看在线播放版| 一二三四在线观看高清电视剧 | 好嗨哟在线看片免费| 内射人妻骚骚骚| 亚洲AV成人无码999WWW| a久久99精品久久久久久蜜芽| 国产一级做a爰片久久毛片男| 欧美另类videosbest| 亚洲伊人久久网| 国产成A人片在线观看| 撅高 自己扒开 调教| 午夜福利不卡片在线播放免费| 99久久精品费精品蜜臀AV| 花蝴蝶在线高清视频观看免费播放| 日本大尺码喷液过程视频| 在线观看视频中文字幕| 国产精品一库二库三库| 欧美黄色一级| 影音先锋男人av橹橹色| 国产伦精品一区二区三区免费| 欧美精品一卡二卡| 伊人在线高清视频| 国产亚洲精品免费视频| 日本人添下面的全过程| 91素人约啪| 久久免费精品国产72精品剧情| 亚洲AV无码一区二区三区乱子伦| 被黑人掹躁10次高潮| 另类专区hy777|