อ่าน 7 นาที
สตรีม
ใน ระบบเครือ ข่าย คอมพิวเตอร์ STREAMS คือเฟรมเวิร์กพื้นฐานใน Unix System V สำหรับการใช้งาน ไดรเวอร์ อุปกรณ์แบบอักขระ โปรโตคอลเครือข่าย และ การสื่อสารระหว่างกระบวนการ...
สตรีม
ใน ระบบเครือ ข่ายคอมพิวเตอร์STREAMSคือเฟรมเวิร์กพื้นฐานในUnix System Vสำหรับการใช้งาน ไดรเวอร์ อุปกรณ์แบบอักขระโปรโตคอลเครือข่าย และการสื่อสารระหว่างกระบวนการในเฟรมเวิร์กนี้ สตรีมคือสายโซ่ของโครูทีนที่ส่งข้อความระหว่างโปรแกรมและไดรเวอร์อุปกรณ์ (หรือระหว่างโปรแกรมสองโปรแกรม) STREAMS มีต้นกำเนิดมาจาก Version 8 Research Unixในชื่อ Streams (ตัวพิมพ์เล็ก)
การออกแบบของ STREAMS เป็นสถาปัตยกรรมแบบโมดูลาร์สำหรับการใช้งาน I/Oแบบฟูลดูเพล็กซ์ระหว่างเคอร์เนลและไดรเวอร์อุปกรณ์ การใช้งานที่พบบ่อยที่สุดคือการพัฒนา I/O เทอร์มินัล ( line discipline ) และระบบย่อยเครือข่าย ใน System V Release 4 อินเทอร์เฟซเทอร์มินัลทั้งหมดได้รับการเขียนใหม่โดยใช้ STREAMS [ 1 ]แนวคิดที่สำคัญใน STREAMS คือความสามารถในการผลักดันไดรเวอร์ – โมดูลโค้ดแบบกำหนดเองที่สามารถแก้ไขฟังก์ชันการทำงานของอินเทอร์เฟซเครือข่ายหรืออุปกรณ์อื่น ๆ – เข้าด้วยกันเพื่อสร้างสแต็ก ไดรเวอร์เหล่านี้หลายตัวสามารถเชื่อมต่อกันตามลำดับได้
ประวัติศาสตร์
STREAMS อิงตามซับซิสเต็ม I/O ของ Streams ที่นำเสนอในResearch Unix ฉบับที่แปด (V8) โดยDennis Ritchieซึ่งใช้สำหรับซับซิสเต็มI/O ของเทอร์มินัล และชุดโปรโตคอลอินเทอร์เน็ตเวอร์ชันนี้ยังไม่ได้เรียกว่า STREAMS ด้วยตัวพิมพ์ใหญ่ เหมาะสมกับฟังก์ชันการทำงานใหม่ภายใต้การเรียกใช้ระบบ I/O ของอุปกรณ์ที่มีอยู่ ( open , close , read , writeและioctl ) [ 2 ]และการใช้งานถูกจำกัดไว้เฉพาะ I/O ของเทอร์มินัลและโปรโตคอลที่ให้ความหมาย I/O แบบท่อ
ระบบ I/O นี้ได้รับการพอร์ตไปยัง System V Release 3 โดย Robert Israel, Gil McGrath, Dave Olander, Her-Daw Che และ Maury Bach ซึ่งเป็นส่วนหนึ่งของเฟรมเวิร์กที่กว้างขึ้นเพื่อรองรับโปรโตคอลการขนส่งที่หลากหลาย รวมถึง TCP, การขนส่ง ISO Class 4, SNA LU 6.2 และโปรโตคอล AT&T NPACK (ที่ใช้ในRFS ) [ 3 ] มีการเผยแพร่ครั้งแรกพร้อมกับแพ็คเกจ Network Support Utilities (NSU) ของ UNIX System V Release 3 [ 4 ] การพอร์ตนี้ได้เพิ่มการเรียกใช้ระบบputmsg , getmsgและpoll ซึ่งมีวัตถุประสงค์เกือบเทียบเท่ากับการ เรียก ใช้ send , recvและselectจากซ็อกเก็ต Berkeley การเรียกใช้ระบบ putmsgและgetmsgเดิมเรียกว่าsendและrecv [ 5 ]แต่ได้รับการเปลี่ยนชื่อเพื่อหลีกเลี่ยงความขัดแย้งของเนมสเปซ[ 6 ] ใน System V Release 4 นั้น STREAMS ได้รับการขยายและใช้สำหรับเฟรมเวิร์ก I/O เทอร์มินัลและท่อ ซึ่งมีฟังก์ชันการทำงานใหม่ที่มีประโยชน์ เช่น ท่อแบบสองทิศทางและการส่งผ่านตัวอธิบายไฟล์[ 3 ]นอกจากนี้ยังมีการสร้าง พอร์ตสำหรับUNICOS ด้วย Eric S. Raymondอ้างคำพูดของ Ritchie เกี่ยวกับความซับซ้อนของ System V STREAMS เมื่อเปรียบเทียบกับ V8 Streams ของเขาว่า "Streams มีความหมายที่แตกต่างออกไปเมื่อถูกตะโกน" [ 7 ]
พร้อมกับการพอร์ต System V Release 3 นั้นAT &Tได้พัฒนากฎเกณฑ์การส่งข้อความ STREAMS ที่ไม่ขึ้นกับโปรโตคอลสำหรับเลเยอร์ลิงก์[ 8 ] เครือข่าย[ 9 ]และเลเยอร์การขนส่ง[ 10 ]ของโมเดล OSI (เลเยอร์ 2–4) เนื่องจากการเชื่อมโยงการใช้งานที่ใกล้ชิดของโปรโตคอลเครือข่ายและการขนส่งในสแต็กโปรโตคอล ที่กำหนด และการปฏิบัติทั่วไปในการใช้งานเลเยอร์ 5-7 นอกเคอร์เนล เฉพาะอินเทอร์เฟซบริการ STREAMS ของเลเยอร์ ลิงก์[ 8 ]และเลเยอร์การขนส่ง[ 11 ]เท่านั้นที่ได้รับการกำหนดมาตรฐานโดยX/Open ในภายหลัง ร่วมกับโมเดลการส่งข้อความการขนส่งอินเทอร์เฟซเลเยอร์การขนส่ง (ต่อมาได้รับการยอมรับเป็นอินเทอร์เฟซการขนส่ง X/Open ) ได้รับการกำหนดขึ้นเพื่อให้ API ที่ไม่ขึ้นกับโปรโตคอลการขนส่งสำหรับการพัฒนาแอปพลิเคชัน นอกจากนี้ ไลบรารีที่สนับสนุนเลเยอร์เซสชันการนำเสนอและแอปพลิเคชัน[ 12 ]ได้รับการกำหนดและต่อมาได้รับการกำหนดมาตรฐานโดยThe Open Group [ 13 ]
STREAMS จำเป็นสำหรับการปฏิบัติตามข้อกำหนดSingle UNIX Specificationเวอร์ชัน 1 (UNIX 95) และ 2 (UNIX 98) แต่เนื่องจากการปฏิเสธที่จะจัดหา STREAMS ให้กับ นักพัฒนา BSDและLinuxจึงถูกทำเครื่องหมายว่าเป็นตัวเลือกสำหรับการปฏิบัติตาม POSIX โดยAustin Groupในเวอร์ชัน 3 (UNIX 03) POSIX.1-2008 พร้อมด้วย TC1 (IEEE Std 1003.1 ฉบับปี 2013) ได้กำหนดให้ STREAMS เป็น 'ทำเครื่องหมายว่าล้าสมัย' [ 14 ] [ 15 ]ซึ่งหมายความว่าฟังก์ชันดังกล่าวอาจถูกลบออกในเวอร์ชันในอนาคตของข้อกำหนด อย่างไรก็ตาม คำจำกัดความเฉพาะของ 'ล้าสมัย' ที่ใช้[ 16 ]ยังระบุด้วยว่าแอปพลิเคชัน POSIX ที่ปฏิบัติตามอย่างเคร่งครัด 'จะต้องไม่ใช้คุณสมบัติที่ล้าสมัย'
ภาพรวมทางเทคนิค

ในUnix เวอร์ชัน 7คำสั่งจะเชื่อมต่อกับเทอร์มินัล (แป้นพิมพ์และหน้าจอ หรือแป้นพิมพ์และเครื่องพิมพ์ ) ผ่านกลไกที่เรียกว่า line discipline ซึ่งจะบัฟเฟอร์อินพุตบรรทัดเดียว กล่าวคือ รอให้ผู้ใช้กดปุ่ม Returnก่อนที่จะส่งอินพุตไปยังโปรแกรมเพื่อประมวลผล ซึ่งทำให้สามารถแก้ไขข้อผิดพลาดได้อย่างง่ายดาย Streams เข้ามาแทนที่สิ่งนี้ด้วยชุดโมดูลประมวลผลที่จัดเรียงเป็นโซ่เชิงเส้นที่อนุญาตให้มีการสื่อสารแบบสองทิศทางระหว่างโมดูลที่อยู่ติดกัน โปรแกรมสามารถ "ผลัก" โมดูลใหม่เข้าไปที่ปลายด้านหนึ่งของโซ่เพื่อเปลี่ยนพฤติกรรมของเทอร์มินัลหรืออุปกรณ์อักขระอื่นๆ Ritchie ยกตัวอย่างโซ่ของโมดูลเทอร์มินัลที่เชื่อมต่อกับ โมดูลเครือข่าย Datakitเพื่อให้สามารถเข้าสู่ระบบระยะไกลผ่านเครือข่ายได้[ 5 ]นอกเหนือจากอักขระ (ไบต์) ที่ส่งจากโปรแกรมไปยังอุปกรณ์และในทางกลับกันแล้ว Streams ยังสามารถส่งข้อความควบคุม เช่น "hangup" (ตัดการเชื่อมต่อ) และข้อความ ioctl ได้
สตรีมยังสามารถใช้สำหรับการสื่อสารระหว่างกระบวนการได้โดยการเชื่อมต่อสองกระบวนการเข้ากับเทอร์มินัลเสมือนฟังก์ชันนี้ถูกนำไปใช้ใน ระบบหน้าต่าง mpxสำหรับ เทอร์มินัลกราฟิก Blitซึ่งสามารถแสดง หน้าต่าง จำลองเทอร์มินัล ได้หลาย หน้าต่าง แต่ละหน้าต่างเป็นกระบวนการที่สื่อสารกับระบบหน้าต่างผ่านเทอร์มินัลเสมือนที่มีไดรเวอร์ควบคุมบรรทัดติดตั้งอยู่ โดยส่งอักขระที่พิมพ์ไปยังเทอร์มินัลเสมือนและรับข้อความ (และกราฟิก) เพื่อแสดงผล สัญญาณควบคุมกำหนดความต้องการของผู้ใช้ในการสลับระหว่างหน้าต่างหรือปิดหน้าต่าง[ 17 ] [ 18 ] : 348–350
โมดูล Streams จริงๆ จะอยู่ในพื้นที่เคอร์เนลบน Unix และจะถูกติดตั้ง (push) และลบ (pop) โดยการเรียกใช้ระบบ ioctl ตัวอย่างเช่น ในการติดตั้งวินัยบรรทัดที่กล่าวถึงข้างต้นบนตัวอธิบายไฟล์fdที่อ้างอิงถึงอุปกรณ์เทอร์มินัล จะต้องเขียน (ในภาษาC ) ดังนี้: [ 18 ] : 347
ioctl ( fd , PUSH , TTYLD );ในการดำเนินการอินพุต/เอาต์พุตบนสตรีม จะใช้ การเรียกระบบ readและ เช่น writeเดียวกับตัวอธิบายไฟล์ทั่วไป หรือใช้ชุดฟังก์ชันเฉพาะของ STREAMS เพื่อส่งข้อความควบคุม[ 19 ]
ริทชีสารภาพว่าเสียใจที่ต้องนำสตรีมมาใช้ในเคอร์เนล แทนที่จะเป็นกระบวนการ แต่รู้สึกว่าจำเป็นต้องทำเช่นนั้นเพื่อประสิทธิภาพ[ 5 ] การใช้งาน Plan 9ในภายหลังได้นำโมดูลมาใช้เป็นกระบวนการระดับผู้ใช้[ 20 ]
การนำไปใช้
STREAMS ส่วนใหญ่ถูกใช้งานในระบบ Unix System V แต่ก็มีการใช้งานในระบบอื่นๆ ด้วยเช่นกัน:
- เดิมที Plan 9ใช้ Streams เวอร์ชันมัลติโปรเซสเซอร์ของ Research Unix ในระหว่างการเปลี่ยนไปใช้ Plan 9 รุ่นที่สาม Streams ได้รับการทำให้ง่ายขึ้นเป็นคิว I/O แบบง่าย[ 20 ]
- โค้ดที่เขียนขึ้นที่Mentatถูกนำไปใช้ในNovell NetWareสำหรับสแต็ก TCP/IP และได้รับอนุญาตจากAppleให้ใช้ในMac OS รุ่นคลาสสิกตั้งแต่เวอร์ชัน 7.5.2 เป็นต้นไป โดยเป็นส่วนหนึ่งของ ระบบเครือข่าย Open Transport (ในmacOSสภาพแวดล้อมแบบคลาสสิกใช้สถาปัตยกรรม STREAMS แต่สถาปัตยกรรมเครือข่ายดั้งเดิมใช้ API ซ็อกเก็ต Berkeleyและพัฒนามาจาก โค้ดเครือข่าย BSD )
- FreeBSDมีการสนับสนุนพื้นฐานสำหรับการเรียกใช้ระบบที่เกี่ยวข้องกับ STREAMS ตามที่กำหนดโดยเลเยอร์ความเข้ากันได้ของไบนารี SVR4 [ 21 ]
- เคอร์เนลWindows NTนำเสนอพอร์ตเต็มรูปแบบของ STREAMS ในรูปแบบไบนารี streams.sys NT DDK ยังมีบทเกี่ยวกับ STREAMS แม้กระทั่งใน NT4 แต่ใน NT4 DDK ก็ถูกประกาศว่าล้าสมัยแล้ว สแต็ก TCP/IP ดั้งเดิมสำหรับWindows NT 3.1ถูกนำไปใช้บน STREAMS โดยSpider Systemsและใช้ไบนารี streams.sys ตั้งแต่ NT 3.5 ขึ้นไป TCP/IP ถูกสร้างใหม่ทั้งหมด[ 22 ] [ 23 ]โดยนำเอาของ Microsoft LAN ManagerสำหรับOS/2 1.x มาใช้
- เลเยอร์เครือข่าย AlphaTCP ใน AMOS ซึ่ง เป็นระบบปฏิบัติการสำหรับ คอมพิวเตอร์ Alpha Microก็มีพื้นฐานมาจากSpiderStreams เช่นกัน [ 24 ]
ลินุกซ์ไม่มีฟังก์ชัน STREAMS หากไม่มีส่วนเสริมจากบุคคลที่สามCalderaเคย "ผลักดัน" ให้มีการรวม STREAMS ไว้ในลินุกซ์ราวปี 1998 เพื่อรองรับNetware สำหรับลินุกซ์แต่ถูกปฏิเสธโดยสิ้นเชิงจากนักพัฒนาเคอร์เนลลินุกซ์ด้วยเหตุผลทางเทคนิค (ส่วนใหญ่เป็นเรื่องประสิทธิภาพ) [ 25 ]เลเยอร์ความเข้า กันได้ ในลินุกซ์สำหรับระบบปฏิบัติการอื่น ๆ จะแปลงการทำงานของ STREAMS เป็นซ็อกเก็ตโดยเร็วที่สุด[ 26 ]การใช้งานที่ Caldera ใช้คือ "LiS" โดยบริษัทชื่อ GCOM ต่อมา LiS ได้กลายเป็นประเด็นในการต่อสู้ทางกฎหมาย ระหว่าง SCO Group ซึ่ง เป็นผู้สืบทอดของ Caldera กับลินุกซ์ โดย SCO อ้างว่าลินุกซ์ที่มี STREAMS ละเมิดลิขสิทธิ์ System V ของตน[ 25 ]
หมายเหตุ
- ^ (กู๊ดฮาร์ท 1994 , หน้า 51–53, 403–527)
- ^ (กู๊ดฮาร์ท 1994 , หน้า 52–53)
- ^ a b ( Goodheart 1994 , หน้า 17)
- ^ (กู๊ดฮาร์ท 1994 , หน้า 51)
- ^ a b c ( ริทชี 1984 )
- ^ (กู๊ดฮาร์ท 1994 )
- ^ Eric S. Raymond (2003). "บทที่ 7. มัลติโปรแกรมมิ่ง" . ศิลปะแห่งการเขียนโปรแกรม Unix . Addison-Wesley.
- ^ a b ( DLPI & 2.0.0 )
- ^ ( NPI & 2.0.0 )
- ^ ( TPI & 1.5 )
- ^ ( TPI & 2.0.0 )
- ^ ( APLI 1990 )
- ^ ( XAP 1993 )
- ^ "ข้อกำหนดพื้นฐาน ฉบับที่ 7 ปี 2013 ส่วนที่ B.2.6 STREAMS" . The Open Group . สืบค้นเมื่อ9 มีนาคม 2015 .
- ^ "กลุ่มแก้ไขมาตรฐานทั่วไปของออสติน" . The Open Group . สืบค้นเมื่อ9 มีนาคม 2015 .
- ^ "ข้อกำหนดพื้นฐานของ The Open Group ฉบับที่ 7 รหัส" The Open Group สืบค้นเมื่อ 9 มีนาคม 2015
- ^ ไพค์, ร็อบ (1984). "เดอะ บลิต: เทอร์มินัลกราฟิกแบบมัลติเพล็กซ์"วารสารทางเทคนิคของห้องปฏิบัติการเอทีแอนด์ที เบลล์ 63 ( 8): 1607– 1631. doi : 10.1002/j.1538-7305.1984.tb00056.x . S2CID 34062559 .
- ^ a b Bach, Maurice J. (1986). การออกแบบระบบปฏิบัติการ UNIX . Prentice Hall. Bibcode : 1986duos.book.....B . ISBN 9780132017992.
- ^ดู: – เอกสารอ้างอิงส่วนต่อประสานระบบ,ข้อกำหนด UNIX ฉบับเดียว , เวอร์ชัน 3 จาก The Open Groupและ – เอกสารอ้างอิงส่วนต่อประสานระบบ,ข้อกำหนด UNIX ฉบับเดียว , เวอร์ชัน 3 จาก The Open Group
- ^ a b Presotto, David L. (1990). สตรีมมัลติโปรเซสเซอร์สำหรับ Plan 9. Proc. UKUUG Summer Conf. CiteSeerX 10.1.1.42.1172 .
- ^นิวตัน, มาร์ค. "การจำลอง SysVR4 บน FreeBSD" . หน้าเว็บ FreeBSD ของมาร์ค นิวตัน .
- ^ (บาร์ 2001 )
- ^ (วาเลนไทน์ 2001 )
- ^ "เครื่อง Alpha Micro Phun: คู่มือเบื้องต้นสำหรับ AMOS" สืบค้นเมื่อ 5 มีนาคม 2022
- ^ a b "STREAMS, LiS และ Netware ของ Caldera สำหรับ Linux - อัปเดตแล้ว" Groklaw 3กรกฎาคม 2549 เก็บถาวรจากต้นฉบับเมื่อ 5 พฤษภาคม 2553 เรียกดูเมื่อ 14 กรกฎาคม 2565
- ^อลัน ค็อกซ์,สตรีมและลินุกซ์ , รายชื่อผู้รับจดหมายของเคอร์เนลลินุกซ์, 28 มิถุนายน 1998
ลิงก์ภายนอก
- คู่มือสตรีมต้นฉบับ(4) จาก Unix รุ่นที่ 8
- กรอบงาน STREAMS ใน Digital UNIX – จากคู่มือโปรแกรมเมอร์เครือข่าย Digital UNIX
- คู่มือการเขียนโปรแกรม Oracle (เดิมคือ Sun) STREAMS
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สตรีม
ใน ระบบเครือ ข่าย คอมพิวเตอร์ STREAMS คือเฟรมเวิร์กพื้นฐานใน Unix System V สำหรับการใช้งาน ไดรเวอร์ อุปกรณ์แบบอักขระ โปรโตคอลเครือข่าย และ การสื่อสารระหว่างกระบวนการ...
ประวัติศาสตร์
STREAMS อิงตามซับซิสเต็ม I/O ของ Streams ที่นำเสนอใน Research Unix ฉบับที่แปด (V8) โดย Dennis Ritchie ซึ่งใช้สำหรับซับซิสเต็ม I/O ของเทอร์มินัล และ ชุดโปรโตคอลอินเทอร์เน็ต เวอร์ชันนี้ยังไม่ได้เรียกว่า STREAMS ด้วยตัวพิมพ์ใหญ่...
ภาพรวมทางเทคนิค
ใน Unix เวอร์ชัน 7 คำสั่งจะเชื่อมต่อกับเทอร์มินัล (แป้นพิมพ์และหน้าจอ หรือ แป้นพิมพ์และเครื่องพิมพ์ ) ผ่านกลไกที่เรียกว่า line discipline ซึ่งจะบัฟเฟอร์อินพุตบรรทัดเดียว กล่าวคือ รอให้ผู้ใช้กด ปุ่ม Return ก่อนที่จะส่งอินพุตไปยังโปรแกรมเพื่อประมวลผล...
การนำไปใช้
STREAMS ส่วนใหญ่ถูกใช้งานในระบบ Unix System V แต่ก็มีการใช้งานในระบบอื่นๆ ด้วยเช่นกัน: