OS學習小結

AI芯片学习小结5-Enhanced OS Dataflow(EOS) AI芯片学习小结5-Enhanced OS Dataflow(EOS) 文章:An Energy-Efficient Deep Convolutional Neural Network Inference Processor With Enhanced Output Stationary Dataflow in 65-nm CMOS 时间:2020 根据Eyeriss V1中的分类,已有的AI加速器中的数据流大致可分为Weight Stationary(WS,权值固定)、Output Stationary( 阅读详情

《現代操作系統1~6》總結

Lyle

2011-8-25

一.       操作系統概論

        一般計算機系統包含硬件、系統程序和應用程序三個部分。粗略地講,系統程序中最重要的操作系統,它夾在硬件和應用程序之間,其任務就是有效地管理計算機各種資源,使得使用計算機變得“簡單”。說簡單是因為操作系統作為裸機的擴展,提供給用戶人性化一點的抽象。這些所謂的抽象包括進程和線程、地址空間和文件。

        基礎的硬件有:處理器、存儲器、I/O設備和總線。

        操作系統有多種,這裡主要學的是單CPU操作系統基本原理,這對學習其他高級操作系統是很有幫助的。所以下面的內容幾乎都是假設只有單個CPU的操作系統,除非做特殊說明。

二.       進程與線程

2.1進程

        操作系統是用一張進程表(結構數組)來實現進程的。

       書上最精闢的一句話:“進程是正在運行程序的一個抽象/實例。”這句話看出進程和程序的一點差別:前者是動態的而後者是靜態的。

       一般CPU采用的是“流水線”作業,只不過CPU在各個進程之間來回切換的速度極快,所以給人一種“并行”的偽現象。

       系統資源是有限的,所以進程是有生命周期的,具體包括進程創建和進程死亡。在UNIX系統中是有進程層次(父子關係),而在Windows中由於句柄(令牌)的作用所以所有的進程都是對等的。

       進程有三個可能的狀態:1運行、2阻塞和3就緒。但只有四種轉換關係:1->2,等待輸入;2->3,有有效輸入;3->1,選擇這個進程;1->3,選擇另一個進程。

      上面狀態的轉化關係“3->1”和“1->3”是由進程調度程序引起的。之所以要調度,還是那個原因,資源(CPU)是有限的。一個好的調度算法可以使得資源更有效地被利用。調度算法有FIFO(先進先出)、RR(輪換)和HPF(优先级)等,不同環境如批處理、交互式和實時系統有不同的調度算法。

2.2進程間通信

     進程間通信是通過進程間通信原語來實現的,如下面提到的信號量、管程或消息。

     但凡有共享資源的情況,就有可能潛在“競爭條件”,從而發生錯誤或者死鎖(deadlock),進程們也是一樣的。爲了避免進程的競爭條件,實現多個進程讀寫共享資源的互斥(mutual exclusion),引進臨界區(critical section)的概念。當一個進程在更新共享資源的時候,其他進程不會進入其臨界區。實現互斥的思路有多種,屏蔽中斷、鎖變量和嚴格輪換法等因為可能違反互斥條件而被拋棄,而把鎖變量和警告變量相結合的Perterson算法、需要硬件支持的TSL算法以及它的變體XCHG算法都是正確的,可是儘管正確,他們卻有忙等待的缺點。忙等待算法不僅浪費CPU時間,而且可能產生優先級反轉問題。

      用sleep-wakeup思想來實現互斥算法。1965年Dijkstra提出信號量(semaphore)的概念,對信號量的操作是down(大於零減一)和up(加一),它們通常都作為系統調用實現,這樣在進行屏蔽中斷的時候產生的時間副作用是幾乎沒有的。用信號量來解決有界緩衝區(bound buffer)問題:需要full、empty和mutex這三個信號量。信號量的一個簡化版本是互斥量(mutex),其簡易性適用於管理小段代碼。

      用管程(monitor)來實現進程的互斥。管程是由過程、變量和數據結構等組成的一個集合。管程相當于圍墻,把共享的資源和對其進行操作的進程圍起來,其他進程要訪問該資源就得經過管程,從而實現了互斥。

      消息傳遞(message passing)也可以解決互斥問題。使用send和receive這兩個系統調用,從而比管程要方便一點,也比信號量高級一點。

      屏障(barrier)是一種用於進程組的同步機制。

2.3 線程

      線程是一種輕量級的進程!線程是進程中的一個實體!

      線程不像進程,它不擁有系統資源,但它可與同屬於一個進程的其他兄弟線程共享全部資源。線程調度以及線程間的通信幾乎和進程是一樣的。其中有一點區別,那就是多個進程有多個線程的時候,存在層次上的調度,這時的線程調度取決于是用戶級線程還是內核級線程或者兩者都支持。

       引入線程的原因有:(1)一個程序可能有多個可以同時進行活動,那么把程序分解成多個準并行的線程,會使得程序設計模型變得簡單;(2)線程比進程量級輕,所以容易創建與撤銷;(3)基於計算密集型+I/O密集型的考慮;(4)多CPU情況。

三.       死鎖

通俗地講,所謂資源死鎖,是兩個或兩個以上進程因爭奪資源而出現互相等待的現象,若不假借外力的情況下進程都無法執行下去。

3.1 資源

        這裡講的資源是一種排他性的對象,可以是硬件設備,也可以是一組信息。“簡單地說,資源就是隨著時間的推移,必須能夠獲得、使用以及釋放的任何東西。”

        資源分為可搶占的(如存儲器)和不可搶占的(如CD刻錄機),因前者而產生的死鎖通常可以通過重新分配資源而化解,所以死鎖一般和不可搶占資源有關。

        資源的獲取可以通過信號量或者互斥量來實現。

3.2 資源死鎖概述

        Coffman等人總結了發生資源死鎖的四個必要條件:(1)互斥條件;(2)占有和等待條件;(3)不可搶占條件;(4)環路等待條件。

        處理死鎖的四種策略:

1)忽略之(“鴕鳥算法”)。仁者見仁智者見智,但總歸不是好的方法。

2)檢測死鎖并恢復。采用現有資源向量和資源分配矩陣,通過基於向量的比較的算法來檢測死鎖的存在;假設成功地檢測到死鎖,可以通過諸如“利用搶占資源”、“利用回滾策略”和“殺死進程”的手段進行恢復。

3)細心地進行資源分配,避免死鎖。此法需要事先獲得一些特定的信息,在動態分配資源的過程中通過某種方法防止系統處於不安全狀態。1965年Dijkstra提出“銀行家算法”來防止系統進入不安全狀態,但這種算法是不太實用的。

4)通過破壞上面死鎖的四個必要條件之一來防止死鎖。分別用“使用spooling printer”、“在開始就請求全部資源”、“搶占資源”和“對資源按序編號”來處理四個必要條件。

3.3 死鎖其他

        嚴格地講,死鎖不都因為爭奪資源而引起,所以上面所述都叫“資源死鎖”,除此之外還有一種網絡上的“通信死鎖”,產生的條件為進程集合中的進程都在等待集合中其他的進程引發的事件,這裡沒有涉及資源,該定義同樣適合於資源死鎖。很多時候我們可以設置適當的超時機制來處理通信死鎖。

        活鎖是指進程集合中的進程爲了影響集合中其他進程的變化而持續改變自己的狀態,但不做有用功。活鎖可能飢餓而死,但可以通過先到先服務粗略來避免。

四.       存儲器管理

早期的計算機沒有存儲器抽象,而現在的計算機幾乎都有,其原因在於:若沒有存儲器抽象,物理地址暴露給進程可能會導致系統崩潰,而且想要實現多進程也是困難的。

4.1 地址空間

        為使內存中的多個程序互不影響,需要考慮保護和重定位這兩個問題。為此提出了地址空間的概念,它是應用程序的一種對內存的抽象。“地址空間是一個進程可用於尋址內存的一套地址集合。”早期的一個簡單的為進程分配地址空間的方法是動態重定位,即簡單地把每個進程的地址空間映射到物理內存的不同位置而已,例如CDC6600和Intel8088使用基址寄存器和界限寄存器。但這種方法由於重定位中的加法運算而會使得機器變慢,所以現在基本棄用。

        有兩種處理內存超載的通用方法:(1)交換技術,間歇地把進程掉入內存和存回磁盤。(2)虛擬內存。

        交換技術是一種動態分配內存的方法,位圖和空閒鏈錶是兩種跟蹤內存使用的方式,這和圖的表示方法是類似的。但交換技術始終不是一個好的方法,因為軟件膨脹的關係。

4.2 虛擬內存

        程序是越來越大的,想要把好幾G的程序完全放入內存似乎是不太現實的,因此把程序分割成許多片段,運行時只把需要的小片段放入內存中,稱為覆蓋技術。

        “虛擬內存的基本思想是:每個程序擁有自己的地址空間,這個空間被分割成多個塊,每個塊稱作一頁或頁面(page)。每一頁有連續的地址空間。這些頁被映射到物理內存,但并不是所有的頁都必須在內存中才能運行程序。當程序引用到一部分在物理內存中的地址空間時,由硬件立刻執行必要的映射。當程序引用到一部分不在物理內存中的地址空間時,由操作系統負責將缺失的部分裝入物理內存并重新執行失敗的指令。”(書上原話,足夠精煉)

分頁存儲管理。

        內存空間與頁相同大小的若干存儲塊,稱為物理塊或頁框。為進程分配內存時是以塊為單位將進程中的若干頁分別裝入多個可不相鄰接的塊中。分頁存儲管理的地址結構是由邏輯地址和物理地址組成的,邏輯地址=“頁號+偏移量”,而物理地址=“頁框號+偏移量”。一個程序有一張頁表,頁表結構為“頁號+塊號”。建立快表是提高效率的好方法,也就是把頁表的活躍部分區別對待。當發生缺頁中斷時,就經常需要置換內存中的頁面,因此一個好的頁面置換算法是個關鍵。置換算法有“最優頁面置換算法”、“最近未使用頁面置換算法”、“先進先出頁面置換算法”、“第二次機會頁面置換算法”、“時鐘頁面置換算法”、“最近最少使用頁面置換算法”、“老化算法”、“工作集頁面置換算法”、“工作集時鐘頁面置換算法”等,其中最好的兩種是基於LRU的老化算法和基於工作集的工作集時鐘算法。

分段存儲管理。

        段的長度因程序而異,其結構為“段號+段內地址”。分段能使程序模塊化處理以及處理變化的數據結構變得簡單,但缺點是管理困難。段與頁是有明顯區別的:前者是邏輯單位,目的是滿足用戶需求,且大小不固定而取決于用戶程序,其地址空間是二維的;後者是物理單位,目的是提高內存使用率,且大小固定由系統確定,其地址空間是一維的。

最好的方式是分段與分頁的結合!這樣的機構為“段號+段內頁號+頁內地址”。

五.       文件系統

5.1 文件

        文件是對磁盤存儲的一種抽象,其本質類似于地址空間。

        文件的命名依賴于所處的系統。文件的結構常見的有三種,第一種是字節序列,如UNIX、MS-DOS和Windows;第二種是記錄序列,現在已經棄用;第三種是樹,這在一些處理商業數據的大型機上廣泛使用。

        文件的類型一般有普通文件(regular file)和目錄(directory)。普通文件又分為ASCII文件和二進制文件。而目錄是分層次分級的,對應的有路徑名和一些目錄操作。

        文件屬性是指除了文件名和數據之外其他與文件有關的信息,如日期時間大小等。

        文件操作如create、delete、open等等是爲了便於文件的存儲和檢索。

5.2 文件系統的實現

        多數磁盤被劃分為一個或多個分區,每個分區有一個獨立的文件系統,其中0好扇區稱為主引導記錄(MBR),用來引導計算機。下面是一個示意圖

(參考文獻1中的插圖)

        文件實現。系統為文件分配磁盤塊的方法常見的有:(1)連續分配。簡單,並且操作性能好;但磁盤利用率低。一開始受歡迎,接著受冷落,最後因為一次性寫光學介質的出現有重新受到青睞。(2)鏈錶分配。這種的話文件檢索很慢。(3)在內存中采用表的鏈錶分配。這是基於內存中的文件分配表(FAT)來實現的,但內存有限,故此法對於大磁盤是不合適的。(4)給每個文件賦予一個稱為i節點(index-node)的數據結構,其中列出文件屬性和文件塊的磁盤地址。此法較好。

        目錄實現。Windows采用簡單目錄,包含固定大小帶有磁盤地址和屬性的目錄項。UNIX采用每個目錄項只引用i節點的目錄。

        文件共享。文件系統是一個DAG,因此文件共享是很方便的。

        虛擬文件系統(VFS)。將多個文件系統統一成一個有序的框架,其關鍵思想是抽象出所有文件系統中共同的部分然後將這部分東西單獨放在一層。很流行。

5.3 文件系統的管理和優化

        磁盤空間管理。涉及文件塊大小的確定,以及如何記錄空閒的磁盤塊,和磁盤配額等問題。

        文件系統備份。需要考慮時間和空間、價值、動態數據、安全等問題。

        文件系統性能。常用的優化方法有:(1)高速緩存。(2)塊提前讀。(3)減少磁盤臂運動。

        磁盤碎片整理。

六.       輸入輸出

6.1 I/O硬件原理

        I/O設備大致分為塊設備(block device)和字符設備(character device)這兩種。前者把信息存儲在固定大小的塊中,而且每個塊都有自己的地址,如硬盤、CD-ROM和USB盤等。後者以字符為單位發送或接收一個字符流,是不可尋址的,如打印機、網絡接口、鼠標等。而時鐘卻兩者都不是,但這是極個別,所以上面的分類大致還是滿意的。

        I/O設備一般由機械的和電子的部件組成,其中電子部件稱作設備控制器或適配器。

        CPU與設備控制寄存器和數據緩衝區進行通信的方法有兩種:(1)為每個寄存器分配一個I/O端口號;(2)將所有寄存器映射到內存空間中,具有這種方法的系統稱為內存映射I/O(memory-mapped I/O)。這兩種方法各有優缺點。

        直接存儲器存取(DMA)方案使得CPU尋址設備控制器并與它們交換數據更為有效。

        中斷的機構如圖所示:

(參考文獻1中的插圖)

6.2 I/O軟件原理

        I/O軟件設計的目標:設備獨立性(device independence)、統一命名(uniform naming)、錯誤處理(error handling)、同步(synchronous)(=阻塞)和異步(asynchronous)(=中斷驅動)傳輸、緩衝(buffering)等。

        I/O實現的三個不同方式:(1)程序控制I/O。CPU完成全部工作。(2)中斷驅動I/O。(3)使用DMA的I/O。

6.3 I/O軟件層次

        有四個層次,他們是從底層往上排序的:(1)中斷處理程序;(2)設備驅動程序;(3)與設備無關的I/O軟件;(4)用戶空間的I/O軟件。

6.4 實際的I/O設備

盤:磁盤,RAID,CD-ROM,可刻錄CD,可重寫CD,DVD等。

時鐘。

鍵盤、鼠標、監視器。

電源。

瘦客戶機:有潛力。

七.       總結

結束了兩個多星期間歇性的學習,學的是經典的操作系統原理。主要了解了三個抽象:進程、地址空間和文件,它們構成了操作系統最核心的概念。之外要有死鎖這個有趣的東西,以及各種I/O設備。有些概念還是比較晦澀難懂,希望在以後的學習中加深理解。

雖說不要寫成摘錄的形式,不過這部分內容剛接觸而且概念性很強,有時候不得不引用書中精煉的話,而且不少是目錄的匯總。有點失敗~~

 

參考文獻:

[1] Andrew S. Tanenbaum:Modern Operating System (2nd edition)

Python 学习之一:在Mac OS X下基于Sublime Text搭建开发平台包含numpy,scipy 1 前言Python有很多IDE可以用,官方自己也带了一个,Eclipse也可以。但我在使用各种IDE之后,发现用Sublime Text是最好用的一个。因此,我都是用Sublime Text来编写Python程序。 那么整个搭建其实非常简单。考虑到接下来要做的是科学研究,我们也同时安装numpy,scipy,matplotlib等插件。2 开发环境Macbook Pro Mac OS X 10 阅读详情

相关推荐

一步步学Qt,第五天-Qt学习小结-Qt工作机制

一步步学Qt,第五天-Qt学习小结-Qt工作机制 学习Qt有些时间了,每天留下的是当天自己的学习心得,和问题处理。现在来小小的总结一下,这些天学习Qt,对Qt的个人认识。 Qt的工作机制:(这里借用一个QtGuiApplication来讲解分析) 1、使用QtSDK

Qicz的学习笔记 博客新址:izcqi.com 1490

mac os php mysql_Mysql学习Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结

《Mysql学习Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结》要点:本文介绍了Mysql学习Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结,希望对您有用。如果有疑问,可以联系我们。Mac本地环境搭建在Mac系统,我们可以使用MAMP Pro (官方网站:https://www.mamp.info/en/)软件来搭建本地服务器.安装好这款软件,网站的目录在 /App...

weixin_39538693的博客 115

初识C语言小结

在密切学习了一段时间的C语言初篇后, 我开始慢慢的对C语言有了一个大概的认知和了解. 也逐渐的对它消除了恐惧 在这里, 我想小结一下关于这段时间我对于C语言的认识. C语言的语法包括: 1. 类型, 常量, 变量; 2. 字符串, 转义字符; 3. 注释; 4. 条件语句; 5. 循环; 6. 函数; 7. 数组; 8. 指...

HHHuYYYue的博客 473

《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS

郝智宇 无转载 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统MenuOS 一、Linux内核源代码简介 三个法宝和两把宝剑: (1) 三个法宝:存储程序计算机、函数调用堆栈、终断 (2) 操作系统的两把宝剑:中断上...

weixin_30628801的博客 98

现代操作系统使用人工调优明显没有达到一个最优解,有没有可能将ai和os进行结合,让os具备动态学习能力,虽然感觉有点天方夜谭,毕竟os要求实时性,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1002

51单片机基础知识

前言 周末闲着无聊,以后定时更新一期关于51单片机的学习案例,以供大家平时参考使用。至于单片机,你可以理解为人的大脑,而人各项身体器官的运作需要意识给到大脑,然后大脑再驱动我们的中枢神经进行相应的动作,这里的意识可以理解为我们要写的程序,而人的器官相当于各种输出设备,例如我们以后要学的LED、电机、各种传感器等等。学好单片机能让你找到一份相对不错的工作,当然越可观的东西也是要付出相应努力的。 一、51单片机是什么? 通常我们一说到 51 单片机,指的都是兼容IntelMCS-51体系架构的一系列单片机,而

qq_43537819的博客 6905

Python os和os.path模块常用方法小结

Python os和os.path模块常用方法小结1. 前言2. 文件存在性判断3. 创建文件路径4. 路径拼接5. 路径拆分6. 文件遍历7. 文件重命名8. 小结9. 参考文献 1. 前言 这两天因为要完成一个小任务,批量重命名图片。所以就再学习了一下os和os.path模块,发现其中的一些方法很常见且有用,所以就按照判断文件存在性判断、创建文件路径、路径拼接、路径拆分、文件遍历、文件重命名等...

Jock2018的博客 849

手把手推导APM的 sqrt_controller控制器

前言 玩过无人机的朋友对APM应该都不会陌生,如果是搞过多旋翼飞控且读过代码,肯定遇到过sqrt_controller控制器,它频繁的在位置、姿态控制中出现,所以非常有必要搞清楚这个控制原理。 下面以高度控制器为例来分析。 高度控制 APM的高度控制采用PID串级3环控制,即外环位置控制,中间速度控制,内环速度控制,如下图所示。 今天要讨论的sqrt_controller就是应用于位置控制器中。位置控制器的输出是速度控制器的参考reference输入,如果采用单P控制,其输出vel_ref = pos_e

周小逗的博客 3029

Python os.rename()和os.renames()用法的区别

Python os.rename和os.renames用法的区别1. 前言2. os.rename 和os.renames()2.1 官方的文档2.2 用法比较2.2.1 os.rename(oldpath,newpath)2.2.2 os.renames(oldpath, newpath)3. 小结4. 参考文献 1. 前言 今天看了os和os.path模块的官方文档,其中os.rename()...

Jock2018的博客 1万+

使用JAVA代码转word文档之动态生成数据填充(图文详解)

今天跟公司对接了业务,根据业务需求,乙方需求文档是word格式的,而我们的数据是动态数据,每生成一份数据,就要以word的形式给乙方一份邮件!这就给了我们的工作一定的难度和挑战! 通过阅读资料,团队的帮助以及自我测试,终于实现了这个功能!因为在搜索资料方面,发现各位博主讲的比较模糊,自己碰到了很多bug,浪费了很多宝贵的时间,所以今天写了这篇文章,希望对自己以后或者他人有所帮助! 操作第一步:先准...

huaiyan 7719

米哈游 AI产品经理面试题精选:10道高频考题+答案解析(附PDF)

米哈游是全球知名游戏开发商,以《原神》《崩坏》系列著称,专注二次元文化与AI技术创新。本文整理了10道AI产品经理面试题,涵盖Transformer架构、智能NPC设计、机器学习应用、AIGC产品规划等核心领域。题目既考察技术理解(如RAG原理、多模态模型),又关注产品落地(游戏平衡性优化、伦理安全),同时强调跨团队协作能力。参考答案均结合米哈游业务场景,体现技术驱动与玩家体验并重的产品思维,展现AI在游戏行业的创新应用前景。

ZHHHHH15的博客 682

树与二叉树学习小结

树与二叉树学习小结 对于数据结构的内容,这里不再对栈与队列进行说明。我们先来说一下树与二叉树的内容(概念性的东西有点多): 树的有关概念: 一棵树是由n(n>0)个元素组成的有限集合,其中: (1)每个元素称为结点(node); (2)有一个特定的结点,称为根结点或树根(root); (3)除根结点外,其余结点能分成m(m>=0)个互不相交的有限集合T0,T1,T2,……Tm-1。其中...

是小光a~ 974

服务器被黑?快速检测和识别系统中的恶意进程

在管理服务器时,检测和识别系统中的恶意进程至关重要。本文介绍了使用 `ps`、`top`、`htop` 等系统监控工具,分析日志文件,以及使用 `chkrootkit` 和 `rkhunter` 等安全工具的方法。通过这些步骤,可以有效地检测和处理恶意进程,确保系统的安全和稳定。

_midnight的博客 1417

python模块学习小结

python模块学习小结1.模块的简介和使用简介模块的安装模块的导入2.常用的一些模块2.1 random模块:randint() --------- 产生随机整数[m,n]random() --------------产生0-1的随机数[0,1]uniform() ------------- 产生正态分布的随机数randrange() ------ 产生一个范围内的随机数choices() ---------- 用在序列(容器)(有序的序列)随机筛取一个元素2.2 math模块ceil ---------

m0_46467017的博客 340

STM32的bootloader程序(通过串口更新STM32应用程序)

STM32的bootloader程序(通过串口更新STM32应用程序),对bootloader进行浅浅的学习

星羽空间 1万+

解决MiGPT部署痛点:小米账号异地登录安全验证的解决方案

为让小米音箱更智能🤖,部署MiGPT时遇到小米账号异地登录验证问题,手动验证后仍无法解决。本文分享亲测有效的简化方案✨:通过浏览器F12获取passToken📝,手动创建mi.json配置文件并挂载到Docker容器,无需本地运行MiGPT,直接绕过异地验证,附完整操作步骤和问题排查指南。

XiaoqiangClub的博客 1444

深度学习学习率调整小结

深度学习学习率调整小结简介代码StepLR 简介 learning rate schedules主要就是对分子部分进行调整,采用learning rate schedules的时候多用于SGD这类非自适应的算法之中。 PyTorch提供的学习率调整策略分为三大类: 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing 自适应调整:自适应调整学习率 ReduceLROnPlateau 自定义调整:自定义调整

qq_41917697的博客 3156

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

深度学习培训班当天小结1

宁波深度学习培训当日小结1来了宁波参加一个深度学习的培训班,虽然大部分的内容其实是之前自学的时候都有了了解,但还是借此机会做个总结。 传统机器学习 深度学习简介 环境设置 传统机器学习在这个简单的机器学习介绍中, 我们从线性回归讲起,快速浏览机器学习中涉及的回归、分类、训练数据、测试数据、cost function、算法、模型、特征工程、优化方法、交叉验证、评价指标等等概念。线性回归:(监督学习的例

hehangjiang的博客 3193

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

单调队列学习小结

单调队列学习小结 单调队列::队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。 单调队列的常用操作如下: (1)插入:若新元素从队尾插入后会破坏单调性,则删除队尾元素,直到插入后不再破坏单调性为止,再将其插入单调队列。(这样队列整体始终保持单调,不单调的元素会被逐个删除) (2)获取最优(最大、最小)值:访问首尾元素。 对于调整最值问题上我们还可以通过...

是小光a~ 205

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ROS学习小结

ROS学习小结摘要:创建工作空间(workspace)创建ROS包(package)Listener And Talker编译(catkin_make)python使用消息相关知识服务自定义服务类型服务流程动作自定义动作使用动作动作介绍launch文件yaml文件 2018.7.30 摘要: 本文是在开始学习ROS过程中所做的小结,以二话不说上来就干的方式,一步一步亲自动手实现ROS中创建工作空间...

have_fun_的博客 1934

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

安全性研究学习小结

1.22小结 cmd批量操作文件 python批量移动、重命名、删除 对数据集的调整 批处理 正则表达式 bash语言 批删除 markdown #### 交叉引用的实现 用法1 [需要跳转的文本](#test1) 其中[…]是显示的内容,(#test1)是引用的标签, id="…"是需要引用的标签,<a>…</a>是html语法 <a id=“test1”>锚点</a> 用法2 <a href="#test2">需要跳转的文本</a>

宁晨的博客 639

9.python基础学习--os模块在文件处理中的应用

1.模块含义: 一个包含所有定义的函数和变量的文件,后缀名是.py。模块可以被别的程序引入,以使用模块中的函数功能。 2.OS模块中用法说明: (1)os模块中关于文件/目录常用的函数使用方法: 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录) mk

weixin_40025586的博客 197

Linux嵌入式学习小结(1)——初识字符设备驱动开发

Linux嵌入式学习小结(1)——初始字符设备驱动开发 前言 笔者前段时间自学了有关LinuxARM开发,但由于有关知识过于繁多,所以在此写下相关小结以作梳理。 1.所使用学习资源 1.开发板:正点原子阿尔法开发板:IMX6ULL 2.编程环境:ubuntu16.4 3.ARM版所用Linux系统内核:linux-imx-rel_imx_4.1.15_2.1.0_ga 注:相关资料大家可自行前往正点原子官网下载 2.相关理论知识 1.关于LInux驱动开发 所谓Linux驱动开发,个人理解其实就是编写相关代

secretboys的博客 628

python核心编程之Python程序退出方式小结

这篇文章主要介绍了Python程序退出方式小结,具有一定参考价值,需要的朋友可以了解下。 对于如何结束一个Python程序或者用Python操作去结束一个进程等,Python本身给出了好几种方法,而这些方式也存在着一些区别,对相关的几种方法看了并实践了下,同时也记录下。 参考: Python 核心编程 (第二版) 中文高清 sys.exit() 执行该语句会直接退出程序,这也是经常使用的方法,...

python核心编程 1837

Harmony OS【获取本地json数据的方法】

参考鸿蒙os开发手册:https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/tutorials_Next-SettingUpComponentNavigation

Principal_Z的博客 463
上一篇: Game Theory: 公平博弈
下一篇: DFS.枚舉::poj1753 flip game && poj2965 the Pilots Brothers'refrigerator
初四
博客等级 码龄15年 3粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值