操作系統引導詳細過程

操作系統引導詳細過程

轉自:https://blog.csdn.net/lijie45655/article/details/89366372

就直觀而言,我們所見到計算機啟動的過程是:按下電腦開機鍵,系統在黑色的屏幕下打印出一些英文語句、然后進入進度條狀態,最后到登陸界面,這樣操作系統的引導過程就算完成了。我們不知道的是計算機本身經歷一系列復雜的引導過程,才最終出現在我們面前。假如系統引導不成功,掛了,哇,好尷尬。

接觸計算機時間長的人,都有過安裝操作系統的經歷,無非是找個系統安裝盤(iso)丟到光驅里、弄個U盤啟動程序插入usb接口,也或者裝Windows操作系統的時候,弄個gost備份鏡像,用gost軟件考到C盤里,然后就是漫長的等待。假如安裝過程中,就是不進入登陸界面,又一頓尷尬。

一 、系統引導?

?我們先回到最初的狀態。我們需要知道的是,在計算機中,操作系統是一種程序,程序都是以數據(操作系統也不例外)存在的,數據又是存在于硬盤中的。而硬盤通常分為幾個區,一個計算機中又有幾種存儲介質(包括硬盤),計算機通過CPU來控制運行的。反過來說,在你安裝完一個操作系統之后(就是把光盤鏡像的文件或者GHOST文件丟到主分區)或者開機后,需要讓計算機在開機的時候能識別電腦中的系統,這個過程就是系統引導,計算機系統引導的過程就是在保證硬件設備正常后,計算機利用CPU運行特定程序,通過程序識別硬盤,識別硬盤分區,識別硬盤分區上的操作系統,最后又通過程序啟動操作系統,一環扣一環的完成上述過程,在這環環緊扣的過程中,有一環吊鏈了,我們都是看不到最后的操作系統的。比如:計算機硬件壞了、程序識別不了硬盤,程序識別不了有操作系統的分區,程序不能啟動操作系統初始化程序,都會導致操作系統不能正常啟動。了解操作系統引導機制,或許能幫助我們解決以上問題。而在上述引導過程中,計算機本身又引入了一些中間程序或數據,如boot程序(入口程序),bois程序(操作系統主引導程序),init程序(操作系統初始化程序),Boot Sequence(存儲介質隊列),MBR表(主引導記錄表),PBR(硬盤分區記錄表),EBR(擴展分區引導記錄表)、文件系統等等。

現在操作系統引導方式主要有兩種:

1、bois引導:開機-->BIOS啟動MBR-->MBR啟動激活分區PBR-->啟動bootmgr-->讀取BCD-->啟動對應的系統

?過程:①電腦開機,BIOS找到第一個硬盤 ②MBR在硬盤開頭幾百k以內,BIOS啟動到硬盤上的MBR(主引導記錄) ③PBR在分區開頭的幾百k以內,MBR啟動當前磁盤激活分區的PBR(分區引導記錄) ④VISTA以上的PBR啟動當前分區上的BOOTMGR,找不到則啟動NTLDR ⑤讀取當前分區根目錄下\boot\BCD文件 ⑥啟動BCD里對應菜單的系統。

2、?UEFI引導:

過程:①電腦開機,BIOS找到第一個硬盤 ②BIOS搜索到FAT/FAT32分區上的\EFI\BOOT\BOOTx64.efi(計算機默認引導)或\efi\Microsoft\boot\bootmgrfw.efi(Windows默認引導),BIOS內會有個EFPROM,如果有多個efi文件,會記錄efi文件的啟動順序。這個順序可以在BIOS里修改,也可以用工具修改,EFI文件一般在ESP分區下,分區格式只能是FAT16或FAT32 ③讀取\efi\Microsoft\boot\BCD ④啟動BCD里對應菜單的系統。

什么是BOOT,什么是BIOS,什么是UEFI

BOOT

BOOT其實是你按開機鍵之后,在電腦微軟操作系統運行之前就自動運行的一段小程序。表象上就是windows引導畫面之前那些黑屏藍屏的英文那個階段就是BOOT了。通過這段小程序,它就可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。

BIOS

BIOS它其實也是在電腦里的系統運行之前,但是BOOT出現后加載運行的一個預啟動的操作環境程序,嚴格來算是軟件。是一組固化到計算機內主板上一個ROM芯片上的程序。它保存著計算機最重要的基本輸入輸出的程序、系統設置信息、開機后自檢程序和系統自啟動程序。其主要功能是為計算機提供最底層的、最直接的硬件設置和控制。0xFFFF0000地址處指向BIOS,BIOS的F7C00地址指向MBR。BIOS掃描Boot Sequence(存儲介質隊列)時,如果識別到某塊硬盤的第一個扇區最后兩個字節為55 AA時,將其掛在到地址7C00處。(0xFFFF0000、F7C00、7C00、55 AA、0x80都是在硬件中固定好的,所有硬件廠商都遵循這個約定,即所謂的魔數)

UEFI

UEFI它其實和BIOS是同一個性質的東西,同一種程序,是隨著發展出現的BIOS升級版,被看做是有近20多年歷史的BIOS的繼任者。全稱“統一的可擴展固件接口,它也是在電腦里微軟系統運行之前,但是BOOT出現后加載運行的一個預啟動操作環境程序。因為硬件發展迅速,傳統式(Legacy)BIOS成為進步的包袱,現在已發展出最新的UEFI(UnifiedExtensibleFirmwareInterface)可擴展固件接口。但造化弄人的是,理論上說是比BIOS更先進的UEFI,卻還是諸多支持不足,往往很多是UEFI啟動電腦,到頭來還是切換回BIOS。這也是令人疑惑的所在,不是說BIOS有病毒嗎,不是說UEFI比BIOS好嗎?為啥我按住DEL鍵進入的還是BIOS。這其中博弈的過程,是商業的、技術的各種妥協,我們已無從評論。

?傳統的BIOS引導安裝的電腦,分區表的格式是MBR的,裝機基本是BIOS引導+MBR分區的格式。而UEFI引導安裝的電腦,硬盤分區表是GPT格式的,操作系統安裝后它是運行在UEFI引導+GPT分區的格式基礎上。從硬盤分區上來說UEFI和BIOS就是兩個完全不同的分區表格式了,所以往往用GHOST備份出來的系統,你再重裝還原,最好是原BIOS的裝在BIOS引導方式的電腦上,原UEFI的裝在UEFI的電腦上。不然很容易出問題。

? ? ? ? 硬盤分區格式為MBR格式,啟動模式應該為Legacy;
? ? ? ? 硬盤分區格式為GUID(GPT)格式,啟動模式應該為UEFI。 ? ? ?

? ? ? ?開啟UEFI模式或Legacy模式:

? ? ? ?按住DEL鍵進入BIOS,在“啟動(Startup)”選項卡中,可選擇UEFI啟動:

? ? ? ? ? ?Auto(自動):自動按照啟動設備列表中的順序啟動,優先采用UEFI方式;

? ? ? ? ? ?UEFI only(僅UEFI):只選擇具備UEFI啟動條件的設備啟動;

? ? ? ? ? ?Legacy only(僅Legacy):只選擇具備Legacy啟動條件的設備啟動;

? ? ? ? (注:假如說你的主板很老,你只能選擇BIOS引導,一般來說現在的計算機都兼容BIOS和UEFI,當然也有一進入界面就是UEFI的,如果你原生操作系統引導-是UEFI,你安裝新的操作系統用BIOS引導,恭喜你,你看不到操作系統的,支持BIOS的u盤啟動或者GOST鏡像還原皆如此類)

以x86為例,BIOS引導過程如下:

? ? ? ?1、激活cpu:計算機開機,激活CPU,激活的CPU讀取ROM里的boot,將內存指令寄存器設置為:0xFFFF0000,表示CPU開始從0xFFFF0000這個內存中取出一條指令執行,通常在0xFFFF0000處是一條地址轉跳指令,轉向BIOS的入口。

? ? ?2、加電自檢:CUP開啟BIOS程序。首先執行BIOS自我檢查,確認計算機硬件能否滿足運行的基本硬件條件,這叫做”硬件自檢”(Power-On Self-Test),縮寫為POST。如果硬件出現問題,主板會發出不同含義的蜂鳴,啟動中止。 如果沒有問題,屏幕就會顯示出CPU、內存、硬盤等信息。? ?

? ? ? 3、加載帶有操作系統的硬盤:硬件自檢完成后,BIOS開始讀取Boot Sequence(設置外部存儲設備的啟動順序,排在前面的設備就是優先轉交控制權的設備),根據Boot Sequence中的順序,按照"啟動順序",把控制權轉交給排在第一位的儲存設備。然后計算機將該存儲設備引導扇區的內容加載到內存中。計算機本身并不知道誰是系統硬盤,誰不是系統硬盤,通過遍歷的方式,尋找帶有系統硬盤標識符(MBR,物理上也叫引導扇區)的系統硬盤。

? ? 4、加載主引導記錄(MBR):硬盤以特定的標識符區分引導硬盤和非引導硬盤。在BIOS將所檢查外部存儲設備的第一個扇區載入內存后,如果發現一個扇區的最后兩個字節是“55 AA”,那么這就是一個引導扇區(MBR),這個外部存儲設備也就是一塊可引導盤,計算機將控制權交給主引導記錄。如果最后兩個字節不是“55 AA”,那么BIOS就檢查下一個外部存儲設備。如果沒有其他啟動介質,則顯示 ”No ROM BASIC” ,然后死機。主引導記錄主要作用是,告訴計算機到硬盤的哪個主分區去找操作系統。

? ? 5、加載硬盤分區表:主引導記錄在獲得控制權后,需要找出哪個硬盤分區是含有操作系統的,于是開始掃描硬盤分區表,進而識別含有操作系統的硬盤分區(活動分區)。其中,MBR包含硬盤分區表,硬盤分區表以特定的標識符區分活動主分區和非活動主分區。

? ? ? ?以上表達的意思就是硬盤分區表主要標識和尋找哪個是有操作系統的分區(活動分區),哪個不是操作系統的分區。

? ? ?6、加載硬盤活動分區:每個區可以安裝不同的操作系統,”主引導記錄”因此必須知道將控制權轉交給哪個區。如果分區首字節字節為0x80,就表示該主分區是活動分區(有操作系統的分區),控制權要轉交給這個分區。主引導記錄在找到硬盤活動分區后,開始加載硬盤活動分區。

? ? ?7、加載分區引導記錄(PBR):繼續遍歷硬盤活動分區,計算機會讀取活動分區的第一個扇區。這個扇區叫做”卷引導記錄”(Volume Boot Record,縮寫為VBR,也可稱為分區引導記錄,Partition Boot Record,縮寫為PBR)。分區引導記錄標識了用于引導操作系統的程序位置。

? ? ? ?分區引導記錄的主要作用是,尋找激活分區根目錄下的NTLDR(XP)、bootmgr(Win7 above)、grldr(Grub)、btldr.mbr(BootLink)等可用于引導操作系統的程序(啟動管理器)。

? ? ? 8、加載啟動管理器(boot loader):分區引導記錄搜索到活動分區中的啟動管理器,計算機加載啟動管理器,將控制權交給”啟動管理器。

? ? ?9、加載操作系統初始化程序:啟動管理器尋找激活分區中的啟動配置數據(如:Win7中的BCD文件、XP中的boot.ini),根據啟動配置數據,在顯示器上顯示多操作系統選擇畫面,選擇相應的操作系統,控制權交給操作系統初始化程序(init())。

? ? ?10、加載操作系統:操作系統初始化程序獲取控制權后,加載操作系統內核、硬件、服務等,之后加載桌面等信息,從而啟動整個操作系統。

? ? ? 11、操作系統啟動之后,操作系統內核、應用程序庫、服務、應用程序開始工作。。。。。。。。

二、 系統引導的一些術語

梳理一下操作系統引導過程的一些概念:? ? ?

什么是MBR,什么是DPT,什么是PBR,什么是擴展分區,什么是邏輯分區,什么是boot,什么是GPT。

MBR:

? ? ??MBR,英文“Master Boot Record”,中文“主引導記錄”MBR是IBM公司早年間提出的。它為存儲設備的第一個扇區(這個扇區包含了已安裝的操作系統的啟動加載器和驅動器的邏輯分區信息),位于整個硬盤的0磁道0柱面1扇區。在512字節的主引導扇區中,MBR只占用了其中的446個字節,另外的64個字節交給了 DPT(Disk Partition Table硬盤分區表),最后兩個字節“55,AA”是分區的結束標志,這個整體構成了硬盤的主引導扇區。計算機讀取MBR的512字節內容,如果這512個字節的最后兩個字節是0x55和0xAA,表明這個設備可以用于啟動;如果不是,表明設備不能用于啟動,控制權于是被轉交給”啟動順序”中的下一個設備。

MBR分區表結構

? ?MBR的主要作用是告訴計算機到存儲設備的哪個位置去找操作系統對應的硬盤主分區。它主要由三部分組成:

  • 第1-446字節:調用操作系統的機器碼。
  • 第447-510字節:硬盤分區表(Disk Partition Table,DPT),將硬盤分成若干分區。
  • 第511-512字節:主引導記錄簽名(0x55和0xAA)。

? ? ? ?????主引導記錄完成一下工作:??
???? (1)掃描硬盤分區表查找活動分區;?
???? (2)尋找活動分區的起始扇區;?
???? (3)將活動分區的引導扇區讀到內存;?
????(4)執行引導扇區的運行代碼。?

DPT

? ? ? ?MBR中有個表叫硬盤分區表,用來指向硬盤的各個分區。硬盤分區表長度只有64個字節,里面分成4項,每項16個字節,一個硬盤最多只能分四個一級分區,這些一級分區叫做”主分區”。每個區可以安裝不同的操作系統,”主引導記錄”因此必須知道將控制權轉交給哪個區。硬盤分區表主要用于標識操作系統所在的硬盤主分區。

? 硬盤分區表記錄的每個主分區16個字節,由6個部分組成:

  • 第1個字節:如果為0x80,就表示該主分區是激活分區,控制權要轉交給這個分區。四個主分區里面只能有一個是激活的。
  • 第2-4個字節:主分區第一個扇區的物理位置(柱面、磁頭、扇區號等等)。
  • 第5個字節:主分區類型。
  • 第6-8個字節:主分區最后一個扇區的物理位置。
  • 第9-12字節:該主分區第一個扇區的邏輯地址。
  • 第13-16字節:主分區的扇區總數。

? ? ?最后的四個字節("主分區的扇區總數"),決定了這個主分區的長度。也就是說,一個主分區的扇區總數最多不超過2的32次方。如果每個扇區為512個字節,就意味著單個分區最大不超過2TB。再考慮到扇區的邏輯地址也是32位,所以單個硬盤可利用的空間最大也不超過2TB,這也是win7以下版本的操作系統只能識別小于2TB硬盤的原因。如果想使用更大的硬盤,只有2個方法:一是提高每個扇區的字節數,二是增加扇區總數。

擴展分區和邏輯分區

隨著硬盤越來越大,四個主分區已經不夠了,需要更多的分區。但是,分區表只有四項,因此規定有且僅有一個區可以被定義成”擴展分區”(Extended partition)。

所謂”擴展分區”,就是指這個區里面又分成多個區。這種分區里面的分區,就叫做”邏輯分區”(logical partition)。

計算機先讀取擴展分區的第一個扇區,叫做”擴展引導記錄”(Extended boot record,縮寫為EBR)。它里面也包含一張64字節的分區表,但是最多只有兩項(也就是兩個邏輯分區)。

計算機接著讀取第二個邏輯分區的第一個扇區,再從里面的分區表中找到第三個邏輯分區的位置,以此類推,直到某個邏輯分區的分區表只包含它自身為止(即只有一個分區項)。因此,擴展分區可以包含無數個邏輯分區。

PBR

?PBR(Partition Boot Record 分區引導記錄):每個分區都有分區引導記錄,分區開頭幾kb數據,一般也是0.5kb,內容一般是分區參數以及一小段引導程序。特別的,對于Windows nt6的分區引導記錄,程序核心內容就是搜索當前分區下bootmgr,如果沒有,則搜索ntldr,然后啟動它。分區引導記錄的主要作用是,尋找激活分區根目錄下可用于引導操作系統的程序(啟動管理器)。

GPT:

?GPT的意思是GUID Partition Table,即“全局唯一標識磁盤分區表”。他是另外一種更加先進新穎的磁盤組織方式,一種使用UEFI啟動的磁盤組織方式,??GPT和UEFI BIOS相輔相成,鑒于MBR的磁盤容量和分區數量已經不能滿足硬件發展的需求,GPT首要的任務就是突破了2.2T分區的限制,最大支持18EB的分區。最開始是為了更好的兼容性,后來因為其更大的支持內存(mbr分區最多支持2T的磁盤),更多的兼容而被廣泛使用,特別是蘋果的MAC系統全部使用gpt分區。gpt不再有分區的概念,所有CDEF盤都在一段信息中存儲。可以簡單的理解為更先進但是使用不夠廣泛的技術。在MBR硬盤中,分區信息直接存儲于主引導記錄(MBR)中(主引導記錄中還存儲著系統的引導程序)。但在GPT硬盤中,分區表的位置信息儲存在GPT頭中。因為兼容問題,gpt其實在引導的最開始部分也有一段mbr引導,也叫做“保護引導”,為了防止設備不支持uefi。

GPT分區表結構:

在GTP磁盤的第一個數據塊中同樣有一個與MBR(主引導記錄)類似的標記,叫做PMBR,GPT硬盤中存在PMBR(Protective MBR)分區表和GPT分區表。在GPT分區表的最開頭,處于兼容性考慮仍然存儲了一份傳統的MBR(LBA 0),這個MBR也叫做保護性MBR(Protective MBR)。在支持從GPT啟動的操作系統中,這里也用于存儲第一階段的啟動代碼。在這個MBR中,只有一個標識為0xEE的分區,以此來表示這塊硬盤使用GPT分區表。
?

無論微軟的c、d、e或者linux磁盤掛載,或許都繞不開文件系統這個術語,你的操作系統都是靠文件系統支撐起來的。有文件系統才能正確的找到相應磁盤對應的數據,才能使得后面的操作正常運轉。

什么是文件系統?

文件系統是操作系統用于明確存儲設備(常見的是磁盤,也有基于NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件機構稱為文件管理系統,簡稱文件系統。文件系統由三部分組成:文件系統的接口,對對象操縱和管理的軟件集合,對象及屬性。從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等。

文件系統分類:

Linux

Linux存在幾十個文件系統類型:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系統的介紹)

不同文件系統采用不同的方法來管理磁盤空間,各有優劣;文件系統是具體到分區的,所以格式化針對的是分區,分區格式化是指采用指定的文件系統類型對分區空間進行登記、索引并建立相應的管理表格的過程。

  • ext2具有極快的速度和極小的CPU占用率,可用于硬盤和移動存儲設備
  • ext3增加日志功能,可回溯追蹤
  • ext4日志式文件系統,支持1EB(1024*1024TB),最大單文件16TB,支持連續寫入可減少文件碎片。rhel6默認文件系統
  • xfs可以管理500T的硬盤。rhel7默認文件系統
  • brtfs文件系統針對固態盤做優化,
  • zfs更新?

windows

  • FAT16:MS—DOS和win95采用的磁盤分區格式,采用16位的文件分配表,只支持2GB的磁盤分區,最大單文件2GB,且磁盤利用率低
  • FAT32:(即Vfat)采用32位的文件分配表,支持最大分區128GB,最大文件4GB
  • NTFS:支持最大分區2TB,最大文件2TB,安全性和穩定性非常好,不易出現文件碎片。

其他

  • RAMFS:內存文件系統
  • ISO 9660:光盤
  • NFS:網絡文件系統
  • SMBAFS/CIFS:支持Samba協議的網絡文件系統
  • Linux swap:交換分區,用以提供虛擬內存。

三、總結

以Win7系統為例,整個操作系統引導過程如下:

1、電腦開機后,開始啟動BIOS,開始BIOS自檢。

2、通過自檢后,bios找到硬盤上的主引導記錄MBR.

3、MBR開始讀取硬盤分區表DPT,找到活動分區,找到活動分區中的分區引導記錄PBR,并且把控制權交給PBR.

4、PBR搜索活動區中的啟動管理器bootmgr,找到啟動管理器后,PBR把控制權交給bootmgr(相當于xp里的ntldr文件)。

5、Bootmgr尋找活動分區中的boot文件夾中的BCD文件(啟動配置數據,相當于xp里的boot.ini文件)。

6、找到BCD后,Bootmgr首先從BCD 中讀取啟動管理器bootmgr菜單的語言版本信息,然后再調用BOOTMGR與相應語言的BOOTMGR.EXE.MUI (在boot文件夾對應語言文件夾中)組成相應語言的啟動菜單,之后在顯示器上顯示多操作系統選擇畫面。

7、如果存在多個操作系統而且系統設置的等待時間不是0,那么屏幕就顯示多個操作系統的選擇界面。如果沒有多系統,那么直接進入windows 7系統,不顯示選擇界面。

8、選擇windows 7系統后,bootmgr就會讀取BCD里win7系統所在的盤里的windows\system32\winload.exe文件,并且將控制權交給winload.exe。

9、Winload.exe加載windows7內核、硬件、服務等,之后加載桌面等信息,從而啟動整個windows 7系統,直至執行login程序,跳出登錄界面,等待用戶輸入用戶名和密碼。

10、windows 7系統啟動文件系統,用于后續數據的存入、讀出、修改等。

?

是不是很暈!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

?

GPT轉MBR

?

一般情況下,我們使用Diskpart命令即可完成轉換。

?

操作步驟如下:(注意:轉換磁盤格式需要清空磁盤中的所有分區和數據,在操作前,請保存好磁盤中所有重要數據。)

1.使用Win7光盤或者U盤引導,進入系統安裝界面。

?

MBR分區和GPT分區互相轉換的方法

?

2.按Shift + F10打開命令提示符。

?

MBR分區和GPT分區互相轉換的方法

?

3.輸入"Diskpart"(不用輸入引號,下同),并按回車,進入操作界面

?

MBR分區和GPT分區互相轉換的方法

?

4.輸入:"list disk",查看磁盤信息。注意看磁盤容量來選擇。圖中465G的Disk 0是硬盤,3852M的Disk 1是用于Win7安裝的U盤。

?

MBR分區和GPT分區互相轉換的方法

?

5.輸入:"select disk 0",選擇disk 0為當前操作的磁盤

?

MBR分區和GPT分區互相轉換的方法

?

6.輸入:"Clean",清空當前磁盤分區。

?

MBR分區和GPT分區互相轉換的方法

?

7.輸入:"convert mbr",轉換為MBR分區。

?

MBR分區和GPT分區互相轉換的方法

?

8.操作完成,關閉此命令提示符窗口,繼續按照正常的方法安裝Win7系統即可。

?

擴展知識:convert命令的其它用法:

?

convert ?basic ? ? -將磁盤從動態轉換為基本。

?

convert ?dynamic ?-將磁盤從基本轉換為動態。

?

convert ?gpt ? ? ?-將磁盤從MBR轉換為GPT。

?

convert ?mbr ? ? -將磁盤從GPT轉換為MBR。

部分引用:https://blog.csdn.net/jonathan321/article/details/51987680

? ? ? ? ? ? ? ? ?https://blog.csdn.net/qq_35038153/article/details/78440374

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532775.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532775.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 自定義透明 等待 dialog,Android自定義Dialog內部透明、外部遮罩效果

Android自定義Dialog內部透明、外部遮罩效果發布時間:2020-09-09 03:01:41來源:腳本之家閱讀:117作者:zst1303939801本文實例為大家分享了Android自定義Dialog遮罩效果的具體代碼,供大家參考,具體內容如下圖…

對比損失的PyTorch實現詳解

對比損失的PyTorch實現詳解 本文以SiT代碼中對比損失的實現為例作介紹。 論文:https://arxiv.org/abs/2104.03602 代碼:https://github.com/Sara-Ahmed/SiT 對比損失簡介 作為一種經典的自監督損失,對比損失就是對一張原圖像做不同的圖像…

android 融云瀏覽大圖,融云 Android sdk kit 頭像昵稱更新機制

先申明筆者的實現方式不是唯一 也不一定是最優化的方案 如果您看到此篇博文 有不同看法 或者 更好的優化 更高的效率 歡迎在評論發表意見 融云官網點我融云頭像機制相關視頻詳解首先跟大家說一下 kit 跟 lib 的頭像機制 kit 是已經包含融云已經給開發者定制好的界面 諸如 會話界…

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. 報錯信息 報錯信息: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates tha…

android訪問重定向地址,如何從android中重定向url加載圖像(示例代碼)

嗨,我正面臨這個問題我從RESTCall獲取了一個URL網址是http://hck.re/kWWxUI但是當我在瀏覽器中檢查時,它會重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何將此圖像加載到我的imageView中我已經知道如何將畢加索…

Linux中的awk、sed、grep及正則表達式詳解

Linux中的awk、sed、grep及正則表達式詳解 簡介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk適用于取列,sed適用于取行,grep適用于過濾。 正則表達式 首先我們來介紹一下正則表達式,正則表達式(regular expression)描述了一種…

android聚焦時如何給控件加邊框,edittext設置獲得焦點時的邊框顏色

第一步:為了更好的比較,準備兩個一模一樣的EditText(當Activity啟動時,焦點會在第一個EditText上,如果你不希望這樣只需要寫一個高度和寬帶為0的EditText即可避免,這里就不這么做了),代碼如下:a…

gcc參數 -i, -L, -l, -include

gcc參數 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l參數就是用來指定程序要鏈接的庫,-l參數緊接著就是庫名,那么庫名跟真正的庫文件名有什么關系呢?就拿數學庫來說,他的庫名是m&…

xargs 命令教程

xargs 命令教程 轉自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者: 阮一峰 日期: 2019年8月 8日 xargs是 Unix 系統的一個很有用的命令,但是常常被忽視,很多人不了解它的用法。 本文介紹如…

android strictmode有什么作用,Android 性能優化 之 StrictMode

8種機械鍵盤軸體對比本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?StrictMode概述StrictMode 是用來檢測程序中違例情況的開發者工具。使用StrictMode,系統檢測出主線程違例的情況會做出相應的反應,如日志打…

curl 的用法指南

curl 的用法指南 轉自:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html 作者: 阮一峰 日期: 2019年9月 5日 簡介 curl 是常用的命令行工具,用來請求 Web 服務器。它的名字就是客戶端(client&#xf…

怎么在html顯示已登錄狀態,jQuery Ajax 實現在html頁面實時顯示用戶登錄狀態

當網站是全靜態的html頁面時,而又希望網站會員在登錄之后并在所有頁面頭部顯示登錄狀態,如用戶名等,如果未登錄就是未登錄狀態,下面給大家來分享實現的方法。一、在html靜態頁面中加入div,并指定ID如:二、新…

互斥鎖、條件變量、信號量淺析

互斥鎖、條件變量、信號量淺析 互斥鎖與條件變量 條件變量是為了保證同步 條件變量用在多線程多任務同步的,一個線程完成了某一個動作就通過條件變量告訴別的線程,別的線程再進行某些動作(大家都在semtake的時候,就阻塞在哪里&a…

xpwifi熱點設置android,教你在XP電腦中開啟設置WiFi熱點使用的步驟

對于系統中網絡的連接問題是最重要的,那在處理不同的錯誤的情況中,對于無線網絡的設置也就是我們說的WiFi的使用也是會遇到問題的,那在操作的時候對于電腦中是怎么實現設置WiFi熱點的的,對于這個問題今天小編就來跟大家分享一下教…

C/C++ 指針詳解

指針詳解 參考視頻:https://www.bilibili.com/video/BV1bo4y1Z7xf/,感謝Bilibilifengmuzi2003的搬運翻譯及后續勘誤,也感謝已故原作者Harsha Suryanarayana的講解,RIP。 學習完之后,回看找特定的知識點,善…

android雙聯動列表,Android Fragment實現列表和內容聯動

在平板上經常能看到這種的情況:左邊是一個列表,右邊是列表項對應的內容,當點擊某一個列表時,右邊內容區也會隨之改變。下面使用fragment簡單的demo:思路:在mainactivity定義一個回調接口,并在列…

linux /proc 詳解

linux /proc 詳解 本文整理了一下 linux /proc下的幾個常用的目錄和文件,可供查閱,之后在學習工作中有別的用到的話會再補充。 /proc 簡介 Linux系統上的/proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是&#xff0…

android模擬器太卡,安卓模擬器安裝之后太卡怎么解決

用安卓模擬器玩游戲原理就是在電腦上安裝了一部手機,如果你的電腦配置不是非常高,能不卡頓嗎?遇到卡頓怎么解決?1、安裝最新版本的顯卡驅動。逍遙模擬器對于顯卡的性能要求很高,因此升級至最新版本的顯卡驅動,是確保逍遙模擬器流…

編程環境中Runtime(運行時)的三個含義

編程環境中Runtime(運行時)的三個含義 轉自:https://www.zhihu.com/question/20607178 知乎答主doodlewind 三個含義 實際上編程語境中的 runtime 至少有三個含義,分別是: 指「程序運行的時候」,即程序…

非常不錯的一款html5【404頁面】,不含js腳本可以左右擺動,原生JavaScript實現日歷功能代碼實例(無引用Jq)...

這篇文章主要介紹了原生JavaScript實現日歷功能代碼實例(無引用Jq),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下成品顯示,可左右切換月份html 代碼移動端日歷日一二三四五六css代碼*{margin: 0;pa…