讨论在网路连接上进行资料读写的系统呼叫.ppt
《讨论在网路连接上进行资料读写的系统呼叫.ppt》由会员分享,可在线阅读,更多相关《讨论在网路连接上进行资料读写的系统呼叫.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Socket I/O1Introductionn討論在網路連接上進行資料讀寫的系統呼叫n分成三部分來討論n1.傳送資料(write,writev,sendto,sendmsg)的系統呼叫n2.接收資料(read,readv,recvfrom,recvmsg)的系統呼叫n3.select系統呼叫,用來監看descriptor2Code Introduction3Socket Buffernsockbuf data structure456Socket Buffern每一個緩衝區中,除了指向儲存資料的mbuf chain外,還含有控制資訊nsb_mb:指向mbuf chain中的第一個mbufns
2、b_cc:紀錄包含在mbuf中的資料總位元數nsb_hiwat/sb_lowat:拿來調節socket的流量控制演算法 nsb_mbcnt:在這一個mbuf中,總共配置了多少記憶體空間給mbufnsb_mbmax:在每一個socket緩衝區裡面,要配置給mbuf之記憶體空間的上限值。系統核心的絕對極限值(sb_max:262144 bytes)7Socket Buffernsb_sel:用來實作select系統呼叫的selinfo資料結構nsb_timeo:限制一個行程在進行讀取、或是寫入之呼叫,所能被停頓的時間(ticks)。預設值是0(無限期的等待)8Socket Buffernsb_fl
3、ags:9write,writev,sendto,and sendmsg System Calln寫入系統呼叫nwrite,writev,sendto,and sendmsgn負責在一個網路連接上傳送資料n會直接或間接的呼叫sosend函式nsosend會從行程中複製資料到系統核心中,並將資料遞交給相關的通訊協定1011nwritev,sendmsg可以接受來自多重緩衝區的資料n從多重緩衝區進行寫入稱為收集(gathering)n系統核心會從iovec資料結構陣列所指定的各種緩衝區當中依序去接收資料12nIov_base:指向一個長度為iov_len個位元的緩衝區開頭n如果沒有這一種型態的介面
4、n行程得先將各緩衝區的資料複製到一個較大的緩衝區n得呼叫多次的寫入系統呼叫n以上兩種都較沒有效率1314nsendmsg支援控制資訊n控制資訊、以及一些要傳遞給sendmsg的參數,都是在一個msghdr資料結構中被指定的15sendmsg System Callnsendmsg,sendit會負責準備sosend函式呼叫所需要的資料結構,sosend會把這一些訊息交給適當的通訊協定nSOCK_DGRAM:一份訊息就是一個資料包nSOCK_STREAM:一份訊息就是一連串的位元組ncopy iov arraynsendit and cleanup16sendit Function Calln被
5、sendto,sendmsg這二個system call呼叫nsendit會去初始化一個uio資料結構n將control,address 資訊從行程中複製到系統核心nInitial auion會去呼叫getsock函式,取得descriptors 相關的file資料結構n初始化uio資料結構,把行程所指定的輸出緩衝區收集到系統核心當中的mbufsn把各個緩衝區的長度大小加總,並且存在uio_residnCopy address and control information from the processnSend data and cleanup17sosend Function Call
6、n5個寫入系統呼叫,最後會呼叫sosendnsosend要將資料、控制資訊,根據通訊協定以及socket指定的緩衝區限制值,遞交給與這一個socket相關的通訊協定的pr_usrreq函式nsosend不會將資料放到緩衝區,通訊協定要自行儲存、移除這一些資料nsosend會根據相關的通訊協定是否有實作可信賴或是不可信賴的資料傳輸語意,來定義緩衝區的sb_hiwat以及sb_lowat18sosend Function Calln可靠通訊協定緩衝區處理n緩衝區中儲存了還沒有被送出去的資料、以及已經傳送出去但是還沒被ACK的資料nsb_cc:緩衝區中所儲存的資料位元數目0=sb_cc=sb_hiw
7、atn如果有任何資料要透過pr_usrreq傳遞給通訊協定,sosend會確保緩衝區中有足夠的空間,通訊協定層會把資料添加到傳送緩衝區19nsosend會根據以下兩種方式當中一種,把資料傳輸給通訊協定nPR_ATOMIC被設定:sosend必須在行程和通訊協定之間保留訊息的邊界。sosend會去等待足夠的空間來儲存整個訊息,當有足夠空間可使用,一條包含整個訊息的mbuf chain就會建造出來,並透過pr_usereq在單一次呼叫中遞交給通訊協定,RDP便是這一類的通訊協定。nPR_ATOMIC沒被設定:sosend就會把訊息一次遞交一個mbuf給通訊協定,也有可能遞交部分的mbuf,避免超出
8、高水位標,TCP這一類的SOCK_STREAM通訊協定所使用。20sosend Function Calln不可靠通訊協定緩衝區處理n沒有任何資料會儲存在傳送緩衝區,也不會預期去收任何的ACKn每一份訊息,都是直接被遞交給通訊協定,放到適合的網路裝置佇列等候傳送nsb_cc永遠為0,sb_hiwat則是指出每一次最大寫入的長度大小也間接指出資料包的最大長度nUDP來說,sb_hiwat的預設值是9216,除非用SO_SNDBUF這一個socket選項去修改21sosend Function Calln流程n初始化n錯誤與資源的檢查n資料傳輸n通訊協定分發22sosend Function Ca
9、lluiomove Functionnint uiomove(cassr_t cp,int n,struct uio*uio)nuiomove會在cp所參考到的單一一個緩衝區,與uio裡頭iovec陣列所指定的多重緩衝區之間,搬移n個位元23sosend Function Call24sosend Function Call25sosend Function Calln發出pr_usrreq(PRU_SEND)ntcp_usrreq()n將要送的資料添加到so_snd緩衝區中n呼叫tcp_output262728read,readv,recvfrom,and recvmsg System Ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 讨论 网路 连接 进行 资料 读写 系统 呼叫
限制150内