กลับไปหน้าบทความ

อ่าน 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 ที่ปฏิบัติตามอย่างเคร่งครัด 'จะต้องไม่ใช้คุณสมบัติที่ล้าสมัย'

ภาพรวมทางเทคนิค

ตัวอย่างการใช้สตรีมเพื่อดำเนินการคำสั่งระยะไกลผ่านเครือข่าย (อ้างอิงจากRitchie 1984 )

ใน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 ]

หมายเหตุ

  1. ^ (กู๊ดฮาร์ท 1994 , หน้า 51–53, 403–527)
  2. ^ (กู๊ดฮาร์ท 1994 , หน้า 52–53)
  3. ^ a b ( Goodheart 1994 , หน้า 17)
  4. ^ (กู๊ดฮาร์ท 1994 , หน้า 51)
  5. ^ a b c ( ริทชี 1984 )
  6. ^ (กู๊ดฮาร์ท 1994 )
  7. ^ Eric S. Raymond (2003). "บทที่ 7. มัลติโปรแกรมมิ่ง" . ศิลปะแห่งการเขียนโปรแกรม Unix . Addison-Wesley.
  8. ^ a b ( DLPI & 2.0.0 )
  9. ^ ( NPI & 2.0.0 )
  10. ^ ( TPI & 1.5 )
  11. ^ ( TPI & 2.0.0 )
  12. ^ ( APLI 1990 )
  13. ^ ( XAP 1993 )
  14. ^ "ข้อกำหนดพื้นฐาน ฉบับที่ 7 ปี 2013 ส่วนที่ B.2.6 STREAMS" . The Open Group . สืบค้นเมื่อ9 มีนาคม 2015 .
  15. ^ "กลุ่มแก้ไขมาตรฐานทั่วไปของออสติน" . The Open Group . สืบค้นเมื่อ9 มีนาคม 2015 .
  16. ^ "ข้อกำหนดพื้นฐานของ The Open Group ฉบับที่ 7 รหัส" The Open Group สืบค้นเมื่อ 9 มีนาคม 2015
  17. ^ ไพค์, ร็อบ (1984). "เดอะ บลิต: เทอร์มินัลกราฟิกแบบมัลติเพล็กซ์"วารสารทางเทคนิคของห้องปฏิบัติการเอทีแอนด์ที เบลล์ 63 ( 8): 1607– 1631. doi : 10.1002/j.1538-7305.1984.tb00056.x . S2CID 34062559 . 
  18. ^ a b Bach, Maurice J. (1986). การออกแบบระบบปฏิบัติการ UNIX . Prentice Hall. Bibcode : 1986duos.book.....B . ISBN 9780132017992.
  19. ^ดู:putmsg – เอกสารอ้างอิงส่วนต่อประสานระบบ,ข้อกำหนด UNIX ฉบับเดียว , เวอร์ชัน 3 จาก The Open Groupและgetmsg – เอกสารอ้างอิงส่วนต่อประสานระบบ,ข้อกำหนด UNIX ฉบับเดียว , เวอร์ชัน 3 จาก The Open Group
  20. ^ a b Presotto, David L. (1990). สตรีมมัลติโปรเซสเซอร์สำหรับ Plan 9. Proc. UKUUG Summer Conf. CiteSeerX 10.1.1.42.1172 . 
  21. ^นิวตัน, มาร์ค. "การจำลอง SysVR4 บน FreeBSD" . หน้าเว็บ FreeBSD ของมาร์ค นิวตัน .
  22. ^ (บาร์ 2001 )
  23. ^ (วาเลนไทน์ 2001 )
  24. ^ "เครื่อง Alpha Micro Phun: คู่มือเบื้องต้นสำหรับ AMOS" สืบค้นเมื่อ 5 มีนาคม 2022
  25. ^ a b "STREAMS, LiS และ Netware ของ Caldera สำหรับ Linux - อัปเดตแล้ว" Groklaw 3กรกฎาคม 2549 เก็บถาวรจากต้นฉบับเมื่อ 5 พฤษภาคม 2553 เรียกดูเมื่อ 14 กรกฎาคม 2565
  26. ^อลัน ค็อกซ์,สตรีมและลินุกซ์ , รายชื่อผู้รับจดหมายของเคอร์เนลลินุกซ์, 28 มิถุนายน 1998
  • คู่มือสตรีมต้นฉบับ(4) จาก Unix รุ่นที่ 8
  • กรอบงาน STREAMS ใน Digital UNIX  – จากคู่มือโปรแกรมเมอร์เครือข่าย Digital UNIX
  • คู่มือการเขียนโปรแกรม Oracle (เดิมคือ Sun) STREAMS
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=STREAMS&oldid=1360733774 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ สตรีม

ใน ระบบเครือ ข่าย คอมพิวเตอร์ 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 แต่ก็มีการใช้งานในระบบอื่นๆ ด้วยเช่นกัน: