中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

提供網(wǎng)站建設(shè)價(jià)格產(chǎn)品seo怎么優(yōu)化

提供網(wǎng)站建設(shè)價(jià)格,產(chǎn)品seo怎么優(yōu)化,網(wǎng)站目錄是什么,做公司網(wǎng)站哪里好一.什么是信號(hào) 生活中,有哪些信號(hào)相關(guān)的場(chǎng)景呢,比如:紅綠燈,鬧鐘,轉(zhuǎn)向燈等等 1.這里我們要知道,你為什么認(rèn)識(shí)這些信號(hào)呢,記住了對(duì)應(yīng)場(chǎng)景下的信號(hào)+后續(xù)是有”動(dòng)作“要你執(zhí)行的 2.我們…

一.什么是信號(hào)

生活中,有哪些信號(hào)相關(guān)的場(chǎng)景呢,比如:紅綠燈,鬧鐘,轉(zhuǎn)向燈等等

1.這里我們要知道,你為什么認(rèn)識(shí)這些信號(hào)呢,記住了對(duì)應(yīng)場(chǎng)景下的信號(hào)+后續(xù)是有”動(dòng)作“要你執(zhí)行的

2.我們?cè)谖覀兊拇竽X中,能夠識(shí)別這個(gè)信號(hào)的

3.如果特定信號(hào)沒(méi)有產(chǎn)生,但是我們依舊知道應(yīng)該如何處理這個(gè)信號(hào)

4.我在收到這個(gè)信號(hào)的時(shí)候,可能不會(huì)立即處理這個(gè)信號(hào)

5.信號(hào)本身,在我們無(wú)法立即被處理的時(shí)候,也一定要先被臨時(shí)的記住

?結(jié)論:什么是Linux信號(hào),本質(zhì)是一種通知機(jī)制,用戶or操作系統(tǒng)通過(guò)發(fā)送一定的信號(hào),通知進(jìn)程,某些事件已經(jīng)發(fā)生,你可以在后續(xù)進(jìn)行處理。

二.信號(hào)如何使用,結(jié)合進(jìn)程,信號(hào)結(jié)論

1.進(jìn)程要處理信號(hào),必須具備信號(hào)“識(shí)別”的能力(看到+處理動(dòng)作)

2.憑什么進(jìn)程能夠“識(shí)別”信號(hào)呢,代碼是程序員編寫的,就比如說(shuō)你是如何認(rèn)識(shí)紅綠燈的,這都是有人告訴你的

3.信號(hào)產(chǎn)生是隨機(jī)的,進(jìn)程可能正在忙自己的事情,所以,信號(hào)的后續(xù)處理,可能不是立即處理的

4.進(jìn)程會(huì)臨時(shí)的記錄下對(duì)應(yīng)的信號(hào),方便后續(xù)進(jìn)行處理

5. 在什么時(shí)候處理呢,合適的時(shí)候(這個(gè)后面會(huì)說(shuō))

6.一般而言,信號(hào)的產(chǎn)生相對(duì)于進(jìn)程而言是異步的(什么是異步呢,異步雙方不需要共同的時(shí)間,也就是接收方不知道發(fā)送方什么時(shí)候發(fā)送,所以在發(fā)送的信息中就要有提示接收方開始接收的信息,如開始時(shí)有開始位,同時(shí)在結(jié)束時(shí)有停止位。)

三.信號(hào)常見的處理方式

1.默認(rèn)(進(jìn)程自帶的,程序員寫好的邏輯)

2.忽略(信號(hào)的一種處理方式)

3.自定義動(dòng)作(捕捉信號(hào))

四.常見信號(hào)

?1-31普通信號(hào),34-64實(shí)時(shí)信號(hào)。

如何理解組合鍵變信號(hào):鍵盤的工作方式是通過(guò):中斷方式進(jìn)行的,當(dāng)然也能夠識(shí)別組合鍵,ctrl+c,OS解釋組合鍵->查找進(jìn)程列表->前臺(tái)運(yùn)行的進(jìn)程->OS寫入對(duì)應(yīng)的信號(hào)到進(jìn)程內(nèi)部的位圖結(jié)構(gòu)中。?

如何理解信號(hào)被進(jìn)程保存:進(jìn)程必須具有保存信號(hào)的相關(guān)數(shù)據(jù)結(jié)構(gòu)(位圖,unisgned int)PCB內(nèi)部保存了信號(hào)位圖字段。

如何理解信號(hào)發(fā)送的本質(zhì):信號(hào)位圖是在task_struct -> task_struct內(nèi)核數(shù)據(jù)結(jié)構(gòu)->OS。

信號(hào)發(fā)送的本質(zhì):OS向目標(biāo)進(jìn)程寫信號(hào),OS直接修改pcb中的指定的位圖結(jié)構(gòu)完成“發(fā)送”信號(hào)的過(guò)程。

五.信號(hào)的產(chǎn)生以及核心轉(zhuǎn)儲(chǔ)

?鍵盤產(chǎn)生信號(hào)

?sighandler_t handler回調(diào)函數(shù),通過(guò)回調(diào)的方式,修改對(duì)應(yīng)信號(hào)的捕捉方法,signum,要捕捉信號(hào)的名稱或編號(hào)。

#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
using namespace std;void cating(int signum)
{cout<<"捕捉到信號(hào):"<<signum<<endl;return;
}int main()
{signal(2,cating);while(1)sleep(1);return 0;
}

signal(SIGINT,catchsig),特定信號(hào)的處理動(dòng)作,一般只有一個(gè),signal函數(shù),僅僅是修改進(jìn)程對(duì)特定信號(hào)的后續(xù)處理動(dòng)作,不是直接調(diào)用對(duì)應(yīng)的處理動(dòng)作,如果后續(xù)沒(méi)有任何SIGINT信號(hào)產(chǎn)生,catchsig永遠(yuǎn)也不會(huì)被調(diào)用。

核心轉(zhuǎn)儲(chǔ)

man 7 signal 查看信號(hào)的默認(rèn)處理行為。這里不同信號(hào)的Action不同,有Term、Core、Ign、Cont、Stop等狀態(tài)行為。

接下來(lái)就是了解一下Core動(dòng)作——核心轉(zhuǎn)儲(chǔ)(一般而言云服務(wù)器的核心轉(zhuǎn)儲(chǔ)功能是被關(guān)閉的)。關(guān)于進(jìn)程等待中,status 中如果是正常終止就保存返回值、錯(cuò)誤碼。

如果被信號(hào)所殺,第7位上保存的這個(gè)就叫做core dump,如果是0表示沒(méi)有發(fā)生核心轉(zhuǎn)儲(chǔ),為1則是發(fā)生了核心轉(zhuǎn)儲(chǔ)。我們可以打印code_dump位的信息 (左移7位然后與上1即可)。?

#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
using namespace std;void cating(int signum)
{cout<<"捕捉到信號(hào):"<<signum<<endl;return;
}
int main()
{pid_t id = fork();if (id == 0){sleep(1);int a = 100;a /= 0;exit(0);}int status = 0;waitpid(id, &status, 0);cout << "父進(jìn)程:" << getpid() << "子進(jìn)程:" << getppid() << endl;//退出信號(hào):cout << "exit sig" << (status & 0x7f) << endl;// 打印core dump位cout << "core dump" << (status > 7 & 1) << endl;
}

如果核心轉(zhuǎn)儲(chǔ)是被關(guān)閉的,可以使用ulimit -a查看,ulimit -c10240打開,這里就可以使用core.11077就可以定位錯(cuò)誤。

系統(tǒng)調(diào)用發(fā)送信號(hào)?

?第一個(gè)參數(shù)為指定的進(jìn)程pid,第二個(gè)參數(shù)為對(duì)應(yīng)的信號(hào)編碼。

kill 是給指定進(jìn)程發(fā)送信號(hào),而如果想讓自己給自己發(fā)信號(hào),可以使用 raise 命令

給自己發(fā)送abort信號(hào),也就是6號(hào)信號(hào)。相當(dāng)于代碼:raise(6) 或 ?kill(getpid(),6)

軟件條件產(chǎn)生信號(hào)

這里可以舉一個(gè)例子:當(dāng)管道,讀端不進(jìn)行讀取,還關(guān)閉了文件描述符,而寫端一直寫入,會(huì)發(fā)生什么問(wèn)題?操作系統(tǒng)會(huì)自動(dòng)終止對(duì)應(yīng)寫端進(jìn)程,通過(guò)發(fā)送信號(hào)的方式,發(fā)送SIGPIPE信號(hào)。

?驗(yàn)證:

1.創(chuàng)建匿名管道

2.讓父進(jìn)程進(jìn)行讀取,子進(jìn)程進(jìn)行寫入

3.讓父進(jìn)程關(guān)閉讀端 && waitpid(),子進(jìn)程一直進(jìn)行寫入

4.子進(jìn)程退出,父進(jìn)程waitpid拿到子進(jìn)程的退出status。

5.提取退出信號(hào)。

SIGPIPE便是一種軟件條件產(chǎn)生的信號(hào),除了管道中會(huì)發(fā)出SIGPIPE信號(hào),接下來(lái)我們學(xué)習(xí)其它軟件產(chǎn)生的信號(hào),alarm 函數(shù)與SIGALRM 信號(hào),系統(tǒng)調(diào)用中的?alarm 函數(shù)會(huì)產(chǎn)生 SIGALRM? 信號(hào)。接下來(lái)讓我們了解一下 alarm 接口。

調(diào)用 alarm 函數(shù)可以設(shè)定一個(gè)鬧鐘,也就是告訴內(nèi)核再?seconds 秒之后給當(dāng)前進(jìn)程發(fā)?SIGALRM 信號(hào),該信號(hào)的默認(rèn)處理動(dòng)作是終止當(dāng)前進(jìn)程。?

利用上面這個(gè)函數(shù),我們可以做一個(gè)定時(shí)器。

int count = 0;void catchSig(int signum)
{cout << "count: " << count << endl;
}
int main()
{// 1秒后發(fā)送消息alarm(1);signal(SIGALRM, catchSig);while (1){++count;}return 0;
}

如何理解軟件條件給進(jìn)程發(fā)送信號(hào)OS先識(shí)別到某種軟件條件觸發(fā)或不滿足。OS構(gòu)建信號(hào),發(fā)送給指定的進(jìn)程。

?硬件異常產(chǎn)生信號(hào)

?首先我們要知道硬件是如何產(chǎn)生信號(hào)的,我們先寫一段整數(shù)除以0的代碼看一下。

void handler(int signum)
{sleep(1);cout << "signal is : " << signum << endl;
}
int main()
{signal(SIGFPE, handler);int a;a/=0;while (1)sleep(1);return 0;
}

這段代碼會(huì)不斷的產(chǎn)生信號(hào)8,但是我們把信號(hào)8捕捉了,他就會(huì)不停的發(fā)送。

一.那如何理解整數(shù)除以0這個(gè)操作

1.因?yàn)橛?jì)算的是CPU,如果CPU計(jì)算出現(xiàn)錯(cuò)誤,會(huì)將錯(cuò)誤信息放入到狀態(tài)寄存器中,狀態(tài)寄存器中有對(duì)應(yīng)的狀態(tài)標(biāo)記位(類比成 位圖),其中會(huì)存在溢出標(biāo)記位,OS會(huì)自動(dòng)進(jìn)行計(jì)算完畢之后的檢查。
2.如果OS識(shí)別到有溢出問(wèn)題,根據(jù) current指針(指向當(dāng)前正在運(yùn)行的進(jìn)程) 找到進(jìn)程,然后提取出 PID,O S再進(jìn)行信號(hào)發(fā)送到該進(jìn)程,進(jìn)程則會(huì)再合適的時(shí)候,進(jìn)行信號(hào)的處理。
3.立即找到當(dāng)前 task_struct中有一個(gè)current指針,當(dāng)程序進(jìn)行執(zhí)行時(shí),current內(nèi)的內(nèi)容也會(huì)被加載到CPU的寄存器中。
4.所以,整數(shù)除以零是一個(gè)硬件異常的問(wèn)題。

二·.那一旦出現(xiàn)硬件異常,進(jìn)程一定會(huì)退出嗎?

不一定,一般默認(rèn)是退出,但是如果我們不進(jìn)行退出,我們也不能進(jìn)行任何操作,因?yàn)闊o(wú)權(quán)訪問(wèn)CPU中的寄存器數(shù)據(jù)。

三.為什么會(huì)發(fā)生死循環(huán)?

因?yàn)榧拇嫫髦械漠惓R恢睕](méi)有被解決,所以一般我們出現(xiàn)除0等錯(cuò)誤,一般就直接exit()退出了。

指針越界、野指針一般被稱為段錯(cuò)誤 (11號(hào)信號(hào)SIGSEGV)

那如何理解野指針或越界問(wèn)題?

1.都必須通過(guò)地址,找到目標(biāo)位置,
2.語(yǔ)言上的地址,全部都是虛擬地址
3.將虛擬地址轉(zhuǎn)化為物理地址
4.頁(yè)表+MMU(Memmory Manager Unit——硬件)
5.野指針,越界->非法地址->MMU轉(zhuǎn)化的時(shí)候,一定會(huì)報(bào)錯(cuò)。因?yàn)镸MU這個(gè)硬件其中也有寄存器,注意,外設(shè)也有寄存器的,不只是CPU有寄存器。

?結(jié)論:硬件也能產(chǎn)生信號(hào)。所有的信號(hào),都有其來(lái)源,但最終全部都是被OS被識(shí)別、解釋、發(fā)送的。

信號(hào)的常見問(wèn)題

為什么所有的信號(hào)產(chǎn)生,最終都要由OS來(lái)執(zhí)行?
因?yàn)镺S是進(jìn)程的管理者。

信號(hào)的處理是否是立即處理的?
由OS在合適的時(shí)機(jī)進(jìn)行處理。

信號(hào)如果不是被立即處理,那么信號(hào)是否需要暫時(shí)被進(jìn)程記錄下來(lái)?記錄在哪里?
需要被記錄下來(lái),記錄在進(jìn)程PCB中對(duì)應(yīng)的信號(hào)記錄位圖。

如何理解OS向進(jìn)程發(fā)送信號(hào)?
本質(zhì)是OS直接修改PCB中的信號(hào)位圖,根據(jù)信號(hào)編號(hào)修改特定的比特位(由0置1)。

http://m.risenshineclean.com/news/40216.html

相關(guān)文章:

  • 徐州網(wǎng)站公司站長(zhǎng)之家怎么用
  • 一個(gè)公司做100個(gè)網(wǎng)站百度一鍵安裝
  • 網(wǎng)站加視頻播放設(shè)計(jì)怎么做的網(wǎng)站建設(shè)維護(hù)
  • 嵌入式應(yīng)用軟件開發(fā)做網(wǎng)站排名優(yōu)化的公司
  • 藝陽(yáng)科技網(wǎng)站建設(shè)seo系統(tǒng)
  • php團(tuán)購(gòu)網(wǎng)站的難點(diǎn)開發(fā)制作app軟件
  • 哪個(gè)網(wǎng)站能學(xué)做微商網(wǎng)站生成器
  • 如何查看網(wǎng)站 是哪家做的蘇州網(wǎng)站制作開發(fā)公司
  • 網(wǎng)站優(yōu)化方案 site ww企業(yè)seo優(yōu)化服務(wù)
  • 個(gè)人soho要怎么做企業(yè)網(wǎng)站網(wǎng)站優(yōu)化招聘
  • 阿里云網(wǎng)站建設(shè)的實(shí)訓(xùn)報(bào)告北京外包seo公司
  • 自己做代練網(wǎng)站steam交易鏈接怎么改
  • 臺(tái)州網(wǎng)站排名公司推廣營(yíng)銷app
  • 美團(tuán)網(wǎng)站界面設(shè)計(jì)超級(jí)外鏈吧外鏈代發(fā)
  • 網(wǎng)站開發(fā)排期表模板重慶seo小z博客
  • wordpress獲取登錄用戶的名字seo搜索引擎優(yōu)化視頻
  • 江華網(wǎng)站建設(shè)域名大全
  • 天津網(wǎng)站在哪里建設(shè)seo診斷
  • wordpress 回收站在哪電銷系統(tǒng)軟件排名
  • 做cpa用什么類型的網(wǎng)站好百度 營(yíng)銷推廣是做什么的
  • 人與狗做的電影網(wǎng)站百度網(wǎng)盤怎么用
  • 許昌專業(yè)做網(wǎng)站公司百度站長(zhǎng)工具怎么查排名
  • 深圳哪里做網(wǎng)站好廣州番禺發(fā)布網(wǎng)
  • 圖書館網(wǎng)站建設(shè)教程電商營(yíng)銷
  • 查網(wǎng)站排名搜索引擎入口google
  • 網(wǎng)站備案必須是企業(yè)嗎外鏈網(wǎng)盤源碼
  • 德州網(wǎng)站優(yōu)化淘寶攝影培訓(xùn)推薦
  • 珠海做網(wǎng)站方案一元手游平臺(tái)app
  • php網(wǎng)站怎么注入網(wǎng)站排名怎么搜索靠前
  • 汽車網(wǎng)站建設(shè)方案英語(yǔ)培訓(xùn)機(jī)構(gòu)