ความหมายของ“ POSIX” คืออะไร?


898

POSIX คืออะไร ฉันได้อ่านบทความ Wikipediaและฉันอ่านทุกครั้งที่พบคำศัพท์ ความจริงก็คือฉันไม่เคยเข้าใจจริงๆว่ามันคืออะไร

ทุกคนช่วยอธิบายให้ฉันฟังได้ไหมโดยอธิบาย "ความต้องการ POSIX" ด้วยหรือไม่



การอ้างอิงคำจำกัดความโดยย่อ - whatis.techtarget.com/definition/…
parasrish

คำตอบ:


622

POSIXเป็นตระกูลของมาตรฐานที่ระบุโดยIEEEเพื่อให้ความกระจ่างและทำให้เกิดความเท่าเทียมกันในการเขียนโปรแกรมแอปพลิเคชัน (และปัญหาเสริมเช่น commandline shell อรรถประโยชน์) ที่จัดทำโดยระบบปฏิบัติการ Unix-y เมื่อคุณเขียนโปรแกรมของคุณให้ใช้มาตรฐาน POSIX คุณสามารถมั่นใจได้ว่าจะสามารถทำการพอร์ตได้อย่างง่ายดายในหมู่อนุพันธ์ Unix ตระกูลใหญ่ ๆ (รวมถึง Linux แต่ไม่ จำกัด เฉพาะ!); ถ้าและเมื่อคุณใช้ Linux API บางตัวที่ไม่ได้มาตรฐานเป็นส่วนหนึ่งของ Posix คุณจะมีเวลาที่ยากขึ้นถ้าคุณต้องการพอร์ตโปรแกรมหรือไลบรารีนั้นไปยังระบบ Unix-y อื่น ๆ (เช่น MacOSX) ในอนาคต


34
ไม่มาตรฐานอยู่ในระดับ API - การโทรที่ระบุแต่ละรายการสามารถนำไปใช้ในเคอร์เนลหรือในไลบรารี C ในแง่ของการโทรอีกครั้งและนั่นก็ใช้ได้สำหรับ Posix (และสำหรับโปรแกรมของคุณด้วย ;-) MacOSX เป็นตาม POSIX ดูdevworld.apple.com/leopard/overview/osfoundations.html สำหรับ Windows ดูen.wikipedia.org/wiki/POSIX#POSIX_for_Windows : การปฏิบัติตาม Posix นั้นรวมอยู่ใน Enterprise และ Ultimate Editions เท่านั้น (ไม่ใช่ในราคาที่ถูกกว่า! -) แม้ว่าคุณจะได้รับ Partways ด้วย Cygwin, en.wikipedia org
Alex Martelli

23
ความคิดเห็นของคุณมีข้อบกพร่องเนื่องจากอย่างน้อยส่วนแบ่งการตลาดของ Microsoft บนเดสก์ท็อปทำให้ "เป็นสิ่งที่โลกตามมา"
Jed Smith

29
ฉันคิดว่าสิ่งที่กรงเล็บหมายถึงคือ Microsoft ไม่ได้ใช้ความพยายามมากในการทำงานร่วมกับแพลตฟอร์มอื่น ๆ
mipadi

12
@deltaray กอดขยายและดับ MS java (ไม่ใช่มาตรฐาน java.util. java.security, java.io, java.lang และ java.awt), Internet Explorer (เกือบจะพูดว่า 'exploder') และ. NET (ใช่ฉันรู้ว่าพวกเขาได้เปิดตัวบางส่วน แหล่งที่มาสำหรับ. NET แต่ลิขสิทธิ์มีข้อ จำกัด และยังไม่ใช่พอร์ต linux แต่ Mono ไม่สมบูรณ์) นอกจากนี้exFAT สิทธิบัตร คุณถูกต้องอย่างแน่นอน
Wyatt8740

25
Microsoft's market share on desktops, at least, makes it "what the world follows"- น่าสนใจที่จะทราบว่ามีอะไรเปลี่ยนแปลงไปมากนักตั้งแต่ความคิดเห็นนี้ตั้งแต่ปี 2009 :)
GMA

516

สิ่งที่สำคัญที่สุดPOSIX 7กำหนด

  1. C API

    ขยาย ANSI Cอย่างมากด้วยสิ่งต่าง ๆ เช่น:

    • แฟ้มการดำเนินงานเพิ่มเติมได้ที่: mkdir, dirname, symlink, readlink, link(hardlinks) poll(), stat, sync,nftw()
    • ประมวลผลและหัวข้อ: fork, execl, wait, pipe, semaphors sem_*หน่วยความจำที่ใช้ร่วมกัน ( shm_*) killพารามิเตอร์การตั้งเวลา ( nice, sched_*) sleep, mkfifo,setpgid()
    • เครือข่าย: socket()
    • จัดการหน่วยความจำ: mmap, mlock, mprotect, madvise,brk()
    • โปรแกรมอรรถประโยชน์: นิพจน์ทั่วไป ( reg*)

    API เหล่านั้นยังกำหนดแนวคิดระบบพื้นฐานที่ต้องพึ่งพาเช่นforkต้องการแนวคิดของกระบวนการ

    หลายลินุกซ์สายระบบที่มีอยู่เพื่อใช้ฟังก์ชั่นที่เฉพาะเจาะจง POSIX C API และทำให้ลินุกซ์ที่สอดคล้องเช่นsys_write, sys_read... หลาย syscalls เหล่านั้นยังมีส่วนขยายของลินุกซ์เฉพาะ แต่

    การใช้งานเดสก์ท็อปหลัก ๆ ของ Linux: glibc ซึ่งในหลาย ๆ กรณีจะมีตัวห่อหุ้มที่ตื้นสำหรับการเรียกของระบบ

  2. ยูทิลิตี้ CLI

    ตัวอย่าง: cd, ls, echo...

    สาธารณูปโภคหลายอย่างที่ตรงปลายด้านหน้าเปลือกสำหรับสอดคล้องฟังก์ชัน API C mkdirเช่น

    ที่สำคัญการดำเนินงานลินุกซ์สก์ท็อป: GNU coreutils สำหรับคนที่มีขนาดเล็กโครงการ GNU แยกต่างหากสำหรับคนใหญ่: sed, grep, awk... บางสาธารณูปโภค CLI จะดำเนินการโดยทุบตีเป็นตัว -ins

  3. ภาษาของเชลล์

    เช่น, a=b; echo "$a"

    ที่สำคัญการดำเนินงานลินุกซ์สก์ท็อป: GNU ทุบตี

  4. ตัวแปรสภาพแวดล้อม

    HOMEเช่น PATH,

    PATH ความหมายการค้นหาที่ระบุไว้รวมทั้งวิธีการป้องกันไม่ให้ทับPATHค้นหา

  5. สถานะการออกจากโปรแกรม

    ANSI C พูด0หรือEXIT_SUCCESSเพื่อความสำเร็จEXIT_FAILUREสำหรับความล้มเหลวและออกจากการใช้งานที่เหลือ

    POSIX เพิ่ม:

    • 126พบคำสั่ง แต่ไม่สามารถเรียกใช้งานได้

    • 127: ไม่พบคำสั่ง.

    • > 128: สิ้นสุดโดยสัญญาณ

      แต่ POSIX ดูเหมือนจะไม่ระบุ128 + SIGNAL_IDกฎที่ใช้โดย Bash: /unix/99112/default-exit-code-when-process-is-terminated

  6. การแสดงออกปกติ

    มีสองประเภทคือ BRE (พื้นฐาน) และ ERE (ขยาย) พื้นฐานเลิกใช้แล้วและเก็บไว้เพื่อไม่ให้แตก API เท่านั้น

    เหล่านั้นจะถูกนำมาใช้โดย C ฟังก์ชัน API และใช้ตลอดทั้งสาธารณูปโภค CLI เช่นgrepยอมรับ Bres โดยค่าเริ่มต้นและ Eres -Eกับ

    เช่น: echo 'a.1' | grep -E 'a.[[:digit:]]'

    การใช้งานลีนุกซ์รุ่นใหญ่: glibc ใช้ฟังก์ชั่นภายใต้regex.hซึ่งโปรแกรมอย่างเช่นgrepสามารถใช้เป็นแบ็กเอนด์

  7. โครงสร้างไดเรกทอรี

    เช่น/dev/null,/tmp

    Linux FHSขยาย POSIX อย่างมาก

  8. ชื่อไฟล์

    • / เป็นตัวแยกเส้นทาง
    • NUL ไม่สามารถใช้
    • .เป็นcwd, ..ผู้ปกครอง
    • ชื่อไฟล์แบบพกพา
      • ใช้สูงสุด 14 ตัวอักษรและ 256 ตัวอักษรสำหรับเส้นทางแบบเต็ม
      • มีได้เพียง: a-zA-Z0-9._-

    ดูเพิ่มเติมที่: การปฏิบัติตาม posix สำหรับระบบไฟล์คืออะไร?

  9. ข้อตกลง API ยูทิลิตี้บรรทัดคำสั่ง

    ไม่ใช่ข้อบังคับที่ใช้โดย POSIX แต่แทบจะไม่มีที่อื่นเลยโดยเฉพาะใน GNU แต่จริงมันมีข้อ จำกัด เกินไปเช่นตัวอักษรธงเดียวเท่านั้น (เช่น-a) ไม่มีรุ่นยาวเครื่องหมายยัติภังค์ (เช่น--all)

    อนุสัญญาที่ใช้กันอย่างแพร่หลายไม่กี่:

    • - หมายถึง stdin ที่คาดว่าไฟล์
    • --ยุติการตั้งค่าสถานะเช่นls -- -lเพื่อแสดงรายการชื่อไดเรกทอรี-l

    ดูเพิ่มเติม: มีมาตรฐานสำหรับสวิตช์บรรทัดคำสั่งและอาร์กิวเมนต์ของ Linux หรือไม่

  10. "POSIX ACLs" (รายการควบคุมการเข้าถึง) setfaclเช่นที่ใช้เป็นแบ็กเอนด์สำหรับ

    นี้ถูกถอนออกแต่มันก็ถูกนำมาใช้ในหลายระบบปฏิบัติการรวมทั้งในลินุกซ์ด้วยsetxattr

เป็นไปตาม POSIX ใคร

ระบบจำนวนมากติดตาม POSIX อย่างใกล้ชิด แต่มีน้อยคนที่ได้รับการรับรองโดย Open Group ที่รักษามาตรฐาน คนที่ได้รับการรับรองที่โดดเด่นรวมถึง:

  • OS X (Apple) X หมายถึงทั้ง 10 และ UNIX เป็นระบบ Apple POSIX ระบบแรกที่เปิดตัวในปี 2001 ดูเพิ่มเติม: OSX เป็น POSIX OS หรือไม่
  • AIX (IBM)
  • HP-UX (HP)
  • โซลาริส (Oracle)

Linux distros ส่วนใหญ่นั้นเข้ากันได้ดี แต่ไม่ได้รับการรับรองเพราะพวกเขาไม่ต้องการจ่ายการตรวจสอบการปฏิบัติตามกฎระเบียบ Inspur ของ K-UXและหัวเว่ย EulerOSเป็นสองตัวอย่างที่ผ่านการรับรอง

รายการอย่างเป็นทางการของระบบได้รับการรับรองพบได้ที่: https://www.opengroup.org/openbrand/register/และที่หน้าวิกิพีเดีย

ของ windows

Windows ใช้ POSIX กับการกระจายระดับมืออาชีพ

เนื่องจากมันเป็นคุณสมบัติเสริมโปรแกรมเมอร์จึงไม่สามารถใช้กับแอพพลิเคชั่นของผู้ใช้ส่วนใหญ่ได้

การสนับสนุนถูกเลิกใช้ใน Windows 8:

ในปี 2559 มีการประกาศ API คล้าย Linux ตัวใหม่ที่ชื่อว่า "Windows Subsystem สำหรับ Linux" มันมีการเรียกระบบ Linux, การทำงานของเอลฟ์, บางส่วนของ/procระบบไฟล์, Bash, GCC, (TODO น่าจะเป็น glibc?) apt-getและอื่น ๆ : https://channel9.msdn.com/Events/Build/2016/P488ดังนั้นฉันจึงเชื่อว่ามัน จะอนุญาตให้ Windows เรียกใช้ POSIX จำนวนมากหากไม่ใช่ทั้งหมด อย่างไรก็ตามจะเน้นไปที่นักพัฒนา / การปรับใช้แทนที่จะเป็นผู้ใช้ปลายทาง โดยเฉพาะอย่างยิ่งไม่มีแผนที่จะอนุญาตให้เข้าถึง Windows GUI ได้

ภาพรวมประวัติของความเข้ากันได้อย่างเป็นทางการของ Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwinเป็นโครงการบุคคลที่สามที่รู้จักกันดีของ GPL สำหรับ "ให้ฟังก์ชั่น POSIX API จำนวนมาก" สำหรับ Windows แต่ต้องการให้คุณ "สร้างแอปพลิเคชันของคุณจากแหล่งที่มาหากคุณต้องการให้ทำงานบน Windows" MSYS2เป็นโครงการที่เกี่ยวข้องที่ดูเหมือนว่าจะเพิ่มฟังก์ชั่นเพิ่มเติมด้านบนของ Cygwin

Android

Android มีห้องสมุด C ของตัวเอง (Bionic) ซึ่งไม่รองรับ POSIX อย่างเต็มรูปแบบเนื่องจาก Android O: รองรับ Android POSIX หรือไม่?

ระดับโบนัส

ลินุกซ์มาตรฐานฐานต่อขยาย POSIX

ใช้ดัชนีที่ไม่ใช่เฟรมซึ่งสามารถอ่านและค้นหาได้มากขึ้น: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

รับเวอร์ชันเต็มของหน้า HTML สำหรับการ grepping: รายการฟังก์ชัน POSIX C API อยู่ที่ไหน


17
ตัวอย่างที่ยอดเยี่ยมถ้าคุณมีคำจำกัดความเช่นเดียวกับคำตอบที่ได้รับการยอมรับนี่จะเป็นคำตอบที่ดีที่สุด
Marc

8
@ Marc ขอบคุณ! ฉันพยายามที่จะไม่ทำซ้ำสิ่งที่พูดในคำตอบอื่น ๆ เพราะคนอาจอ่านแล้วและหลีกเลี่ยงการซ้ำซ้อน ;-) นี่เป็นปัญหาที่ทราบกันดี: meta.stackoverflow.com/questions/305645/…
Ciro Santilli 冠状病毒审查六四事件法轮功

1
เป็นความคิดที่ดีที่จะอธิบายว่า POSIX ครอบคลุมอะไรบ้าง
sleske

4
ทุกที่ในวรรณกรรมการอ้างอิงถึงป๊อปอัป "การปฏิบัติตาม POSIX" และคำจำกัดความทั่วไปของผู้คน POSIX พบคือ "ชุดมาตรฐานสำหรับการทำงานร่วมกันระหว่างระบบปฏิบัติการ Unix-like" แม้ว่าจะมีประโยชน์ แต่คำจำกัดความนี้ทิ้งความสงสัยมากมายโดยเฉพาะเกี่ยวกับคุณสมบัติที่คาดว่าจะทำงานร่วมกัน แน่นอนว่าคุณสามารถไปอ่านข้อมูล POSIX ทั้งหมดเพื่อเจาะลึกรายละเอียด (และใช้เวลามากกับเรื่องนั้น) แต่คำตอบนี้ให้บทสรุปที่จำเป็นมากเพื่อให้ได้ภาพรวมขนาดใหญ่ในขอบเขตของ POSIX ขอขอบคุณ Ciro ที่สละเวลาเขียน!
ARX

มันอาจเป็นการดีที่จะเพิ่ม Posix รับประกันบางอย่างเกี่ยวกับประเภทจำนวนเต็ม ฉันไม่รู้ว่าอะไรคืออะไรและไม่ได้ระบุ แต่ฉันรู้ว่าอย่างน้อย Posix ต้องมี uint8_t, uint16_t, uint32_t และประเภทที่ลงนามที่เกี่ยวข้อง ฉันไม่แน่ใจว่ามันรับประกันว่าประเภทเช่น "int" มีขนาดกำลังของสองหรือไม่และระบบจะไม่ทำสิ่งที่น่ารังเกียจเหมือนมี "int" ที่มีค่า 32 บิตบิตลง 1 และบิตที่เพิ่มขึ้น 31 บิต [ดังนั้นการเพิ่ม uint32_t จึงทำให้ได้ UB] หากคุณมีมาตรฐานที่มีประโยชน์มันอาจจะดีที่จะพูดในสิ่งที่และไม่รับประกันในเรื่องนั้น
supercat

74

POSIXคือ:

POSIX (ออกเสียง / ˈpɒzɪks /) หรือ "Portable Operating System Interface [สำหรับ Unix]" 1เป็นชื่อของตระกูลของมาตรฐานที่เกี่ยวข้องที่ระบุโดย IEEE เพื่อกำหนดอินเตอร์เฟสการเขียนโปรแกรมประยุกต์ (API) พร้อมด้วยอินเตอร์เฟสเชลล์และยูทิลิตี้สำหรับซอฟต์แวร์ เข้ากันได้กับตัวแปรของระบบปฏิบัติการ Unix แม้ว่ามาตรฐานสามารถนำไปใช้กับระบบปฏิบัติการใด ๆ

โดยทั่วไปมันเป็นชุดของมาตรการเพื่อบรรเทาความเจ็บปวดจากการพัฒนาและการใช้รสชาติที่แตกต่างของ UNIX โดยมี API ส่วนใหญ่ (ส่วนใหญ่) และยูทิลิตี้ทั่วไป POSIX ที่ จำกัด ก็มีการขยายไปยัง Windows เวอร์ชันต่างๆเช่นกัน


1. คุณหมายถึง POSIX บอกว่า * ระบบปฏิบัติการ (เมล็ด) ทั้งหมดควรมีชุดการเรียกระบบเหล่านี้อย่างน้อยที่สุด ขวา? 2. WINDOWS / MAC ติดตาม POSIX หรือไม่ ถ้า / ถ้าไม่ WINDOWS (95,98,2000, xp, vista, 7) ทำตามมาตรฐานทั่วไป (อาจเป็นกรรมสิทธิ์ของตนเอง) มาตรฐาน? กล่าวอีกนัยหนึ่ง POSIX ใน Microsoft world ==?
กรงเล็บ

1
โดยพื้นฐานแล้วมันคือชุดของมาตรการเพื่อบรรเทาความเจ็บปวดจากการพัฒนา WAS ??
กรงเล็บ

5
ฉันถามการใช้คำว่าเป็นเหมือนกัน แต่มันเป็นเรื่องที่ถกเถียงกัน เพื่อตอบคำถามของคุณ: (1) ไม่ POSIX มี zilch อย่างที่ต้องทำกับเคอร์เนลเพียงอธิบายถึงวิธีการใช้งาน (2) OS X เป็น BSD และค่อนข้างเข้ากันได้กับ POSIX แต่มีพื้นที่สีเทา Windows 2008 ใกล้เคียงกับการร้องเรียน POSIX มากที่สุด ไม่มีเทียบเท่า POSIX ในโลก Microsoft
Jed Smith

1
@claws: ไม่ได้หมายความว่าจะสกปรกในพื้นที่ภายใต้คำตอบของ cletus ... แต่ ฉันลิงก์ POSIX.1-2008 ในคำตอบของฉัน ... ตรงนั้น
Jed Smith

3
@Jed Smith ไม่มีพื้นที่สีเทาในแง่ของการปฏิบัติตาม Mac OS X; Mac OS X ได้รับการรับรองตามข้อกำหนด Single UNIX v3 ซึ่งเป็นมาตรฐานที่ POSIX เป็นชุดย่อย
ไมเคิลแอรอน Safyan

43

ผมขออธิบายอย่างไม่เป็นทางการ

POSIX เป็นชุดของมาตรฐานที่พยายามแยกแยะระบบ "UNIX" และ UNIX ที่คล้ายกับระบบที่เข้ากันไม่ได้ มันถูกสร้างขึ้นโดยรัฐบาลสหรัฐเพื่อวัตถุประสงค์ในการจัดซื้อจัดจ้าง แนวคิดก็คือว่าการจัดหาของรัฐบาลกลางสหรัฐจำเป็นต้องมีวิธีในการระบุข้อกำหนดตามกฎหมายสำหรับการเสนอราคาและสัญญาประเภทต่าง ๆ ในลักษณะที่สามารถนำมาใช้เพื่อแยกระบบที่ระบบฐานรหัสหรือพนักงานเขียนโปรแกรมที่มีอยู่เดิมไม่สามารถพกพาได้

เนื่องจาก POSIX เขียนโพสต์พฤตินัย ... เพื่ออธิบายชุดของระบบการแข่งขันที่คล้ายคลึงกันอย่างหลวม ๆ ... มันไม่ได้ถูกเขียนในวิธีที่สามารถนำไปใช้ได้

ตัวอย่างเช่น NT ของ Microsoft ถูกเขียนด้วยความสอดคล้อง POSIX มากพอที่จะมีคุณสมบัติสำหรับการเสนอราคาบางอย่าง ... แม้ว่าระบบย่อย POSIX นั้นไม่มีประโยชน์ในแง่ของการพกพาในทางปฏิบัติและความเข้ากันได้กับระบบ UNIX

มาตรฐานอื่น ๆ สำหรับ UNIX ได้ถูกเขียนขึ้นในช่วงหลายทศวรรษที่ผ่านมา สิ่งต่างๆเช่น SPEC1170 (ระบุสิบเอ็ดร้อยเจ็ดสิบฟังก์ชั่นการโทรซึ่งจะต้องมีการใช้งานร่วมกันได้) และสาขาต่าง ๆ ของ SUS (สเปค UNIX เดียว)

ส่วนใหญ่ "มาตรฐาน" เหล่านี้ไม่เพียงพอต่อการใช้งานด้านเทคนิคใด ๆ พวกเขาส่วนใหญ่มีอยู่สำหรับการถกเถียงโต้แย้งทางกฎหมายและเหตุผลที่ผิดปกติอื่น ๆ


1
ถ้าเช่นนั้นลีนุกซ์จะใช้ POSIX เป็นส่วนใหญ่ได้อย่างไร
ninjalj

8
@ninjalj: Linux เขียนขึ้นเพื่อนำไปใช้กับชุดฟังก์ชัน UNIX ที่เหมือนจริง การทำเช่นนั้นในขณะที่สอดคล้องกับ POSIX ทำให้รู้สึกที่สมบูรณ์แบบ อย่างไรก็ตามประเด็นของฉันคือ POSIX ไม่ได้ถูกสร้างขึ้นเป็นสเปคสำหรับการใช้ระบบปฏิบัติการใหม่ ... มันถูกสร้างขึ้นเป็นวิธีสำหรับเจ้าหน้าที่จัดซื้อจัดจ้างภาครัฐของสหรัฐฯ . การมุ่งเน้นใน Linux คือการให้คุณสมบัติที่ใช้งานได้ในลักษณะที่เข้ากันได้อย่างสมเหตุสมผลแข็งแรงและมีประสิทธิภาพ POSIX ไม่ใช่อุบัติเหตุตลอดทาง
Jim Dennis

3
ค่อนข้างฉลาดของคุณที่จะอ้างว่า POSIX เขียนโพสต์พฤตินัย! นั่นคือจุดเด่นขององค์กรพัฒนามาตรฐานที่ดี (SDO) ที่ไม่ได้รับฉันทามติจนกว่าจะมีการปฏิบัติตามอย่างน้อยหนึ่งอย่าง
fpmurphy

4
@fpmurphy: การสร้างข้อมูลจำเพาะหลังการโพสต์พฤตินัยตามหนึ่งหรือสองการใช้งานร่วมกันเป็นบรรทัดฐานสำหรับ IETF ... มาตรฐานโปรโตคอลเครือข่ายที่มีปฏิสัมพันธ์มากกว่าข้อต่อหลวมโดยเจตนา มันไม่ได้เป็นกระบวนการที่ประสบความสำเร็จสำหรับมาตรฐานระบบปฏิบัติการ API ระหว่างโปรแกรมและระบบ (เคอร์เนลหรือ microkernel และเซิร์ฟเวอร์ระบบย่อย) นั้นมีความแน่นหนากว่าไคลเอนต์และเซิร์ฟเวอร์หรือเพื่อนผ่านเครือข่าย (ฉันไม่ได้บอกว่ามันเป็นไปไม่ได้ แต่เพียงชี้ให้เห็นว่ามีความแตกต่างและประวัติศาสตร์ไม่ได้แสดงให้เห็นถึงแนวโน้มหลัง)
จิมเดนนิส

2
ความพยายามของ IEEE ในการระบุ POSIX ย้อนกลับไปในปี 1985 นั้นถูกกระตุ้นโดยรัฐบาลสหรัฐ ทำวิจัยอ่านหนังสือประวัติศาสตร์หรืออะไรซักอย่าง
rustyx

29

POSIX เป็นมาตรฐานสำหรับระบบปฏิบัติการที่ควรทำให้การเขียนซอฟต์แวร์ข้ามแพลตฟอร์มง่ายขึ้น มันเป็นเรื่องใหญ่โดยเฉพาะในโลกของ Unix


15
ไม่ใช่แค่ "ควรจะ" ทำให้ง่ายต่อการเขียนรหัสข้ามแพลตฟอร์ม แต่จะทำให้ง่ายต่อการเขียนรหัสข้ามแพลตฟอร์ม ข้อยกเว้นเพียงอย่างเดียวคือ Windows เพราะ Microsoft คิดว่าดีกว่าอย่างอื่นทุกคนและไม่จำเป็นต้องปฏิบัติตาม อย่างไรก็ตามฉันคาดการณ์ว่าสิ่งนี้จะทำงานกับพวกเขาโดยเฉพาะอย่างยิ่งเมื่อ Mac และ Linux ได้รับส่วนแบ่งการตลาดเพิ่มขึ้น หากพวกเขามีไว้สำหรับ "นักพัฒนานักพัฒนานักพัฒนา" พวกเขาจะตระหนักว่านักพัฒนาต้องการการปฏิบัติตาม UNIX
ไมเคิลแอรอน Safyan

จากสิ่งที่ฉันได้ยินจากคนที่ทำงานกับมันอย่างใกล้ชิดมากกว่าที่ฉันเคยทำมันอาจทำให้สิ่งต่าง ๆ ง่ายขึ้น แต่แน่นอนว่ามันไม่เพียงพอสำหรับความประทับใจในการเขียนครั้งเดียวทำงานบน POSIX ส่วนใหญ่ ผู้คนจะได้รับเมื่อพวกเขาได้ยินว่าเป็น "มาตรฐาน" สำหรับระบบปฏิบัติการ
แฮงค์เกย์

6
พวกเขาไม่คิดว่าพวกเขาจะ "ดีกว่าคนอื่น"; พวกเขารู้ว่าพวกเขาใหญ่กว่าคนอื่น นั่นเป็นเหตุผลที่พวกเขาจะเปลี่ยนเพลงเมื่อพวกเขาสูญเสียส่วนแบ่งการตลาด มันไม่เหมือนกันสำหรับพวกเขาเช่น Netscape เริ่มสนใจมาตรฐานเว็บมากขึ้นเมื่อพวกเขาไม่ได้รับความนิยมสูงสุดอีกต่อไป
Ken

การเขียนแอปพลิเคชันเพื่อใช้ POSIX APIs เท่านั้นทำให้การพอร์ตระหว่างระบบปฏิบัติการ Unix และ Unix-like เหมือนกันง่ายขึ้น อย่างไรก็ตามมันเป็นมาตรฐานที่เป็นตัวส่วนร่วมที่ต่ำที่สุด - ดังนั้นยูทิลิตี้หรือแอปพลิเคชันที่เป็นระบบปฏิบัติการหรือฮาร์ดแวร์ที่เฉพาะเจาะจงมักจะต้องมีการเขียนใหม่
fpmurphy

2
@Ken และนั่นคือสาเหตุที่เราไม่ควรปล่อยให้โครเมี่ยมของ Google เบาเกินไป
Wyatt8740

29

POSIX เป็นชุดของมาตรฐานที่วางไว้โดย IEEE และ The Open Group ที่อธิบายถึงวิธีการทำงานของ Unix ในอุดมคติ โปรแกรมเมอร์ผู้ใช้และผู้ดูแลระบบทุกคนสามารถทำความคุ้นเคยกับเอกสาร POSIX และคาดหวังว่า Unix POSIX จะให้สิ่งอำนวยความสะดวกมาตรฐานทั้งหมดที่กล่าวถึง

เนื่องจากยูนิกซ์ทุกตัวทำสิ่งที่แตกต่างออกไปเล็กน้อย - Solaris, Mac OS X, IRIX, BSD และ Linux ล้วนมีลักษณะเฉพาะตัว - POSIX มีประโยชน์อย่างยิ่งสำหรับผู้ที่อยู่ในอุตสาหกรรมเนื่องจากกำหนดสภาพแวดล้อมมาตรฐานให้ทำงานตัวอย่างเช่น ฟังก์ชั่นส่วนใหญ่ในไลบรารี C นั้นอ้างอิงจาก POSIX ดังนั้นโปรแกรมเมอร์จึงสามารถใช้งานแอปพลิเคชั่นของเขาและคาดว่ามันจะทำงานเหมือนกันใน Unices ส่วนใหญ่

อย่างไรก็ตามพื้นที่ที่แตกต่างของ Unix มักจะมุ่งเน้นมากกว่าพื้นที่มาตรฐาน

สิ่งที่ดีเกี่ยวกับ POSIX คือคุณสามารถอ่านด้วยตัวเอง:

ข้อกำหนดเฉพาะของ Open Group Base ฉบับที่ 7

ปัญหาที่ 7 เป็นที่รู้จักกันในชื่อ POSIX.1-2008 และมีสิ่งใหม่ ๆ อยู่ในนั้น - อย่างไรก็ตาม Google-fu สำหรับ POSIX.1 และสิ่งนี้จะช่วยให้คุณเห็นประวัติทั้งหมดหลังสิ่งที่ Unix คือ


2
ฉันคิดว่าคุณกำลังใช้คำว่า "UNIX" ไม่ถูกต้อง ตอนนี้ UNIX อ้างถึง Single UNIX Specification และระบบปฏิบัติการ UNIX ใด ๆ เป็นระบบปฏิบัติการที่สอดคล้องกับ Single UNIX Specification บางทีคุณอาจหมายถึง UNIX เหมือน?
ไมเคิลแอรอน Safyan

8
@Michael: ได้รับความคิดเห็นของคุณในคำตอบอื่น ๆ คุณเห็นได้ชัดว่าเป็นคนที่มีความคิดเห็นที่ไม่ได้สร้างสรรค์มากนัก ความคิดเห็นที่เฉพาะเจาะจงนี้มีความหมายอย่างมากและความหมายของฉันก็สื่อไปโดยไม่คำนึงถึงทางเลือกของฉลากที่คุณอาจไม่เห็นด้วย นอกจากนี้ Windows ยังรองรับ POSIX ในรุ่นที่สูงกว่า กรุณาหายใจออกและถอยกลับโปรด
Jed Smith

1
@Jed Smith ความเห็นที่แข็งแกร่งนอกเหนือจากความหมายของโพสต์ก็คือระบบปฏิบัติการบางอย่างที่ได้รับการรับรองตาม UNIX นั้นไม่ใช่ ... ดังนั้นฉันคิดว่ามันยุติธรรมที่จะพูดว่ามันทำให้เข้าใจผิด นอกจากนี้สำหรับ Windows ตราบใดที่มีรุ่นที่ไม่สอดคล้องกันนักพัฒนาไม่สามารถพึ่งพา POSIX เมื่อกำหนดเป้าหมายแพลตฟอร์ม Windows ดังนั้นจึงปฏิเสธวัตถุประสงค์ทั้งหมดของการมี POSIX
Michael Aaron Safyan

Unix เป็นระบบปฏิบัติการ UNIX เป็นแบรนด์ที่จัดโดย The Open Group ระบบที่ได้รับการรับรองทั้งโปรไฟล์การสร้างแบรนด์ UNIX95, UNIX98 หรือ UNIX03 ซึ่งเป็นไปตามข้อกำหนดเฉพาะของ UNIX รุ่นเดียวโดยเฉพาะในรูปแบบส่วนใหญ่ของข้อกำหนดการสร้างแบรนด์สามารถใช้คำว่า UNIX ได้
fpmurphy

6

ในปี 1985 บุคคลจาก บริษัท ต่างๆทั่วอุตสาหกรรมคอมพิวเตอร์ได้ร่วมกันพัฒนามาตรฐาน POSIX (ส่วนต่อประสานระบบปฏิบัติการพกพาสำหรับสภาพแวดล้อมคอมพิวเตอร์) ซึ่งยึดตามมาตรฐาน UNIX System V Interface Definition (SVID) และมาตรฐานอื่น ๆ ก่อนหน้านี้ ความพยายามเหล่านี้ถูกกระตุ้นโดยรัฐบาลสหรัฐซึ่งต้องการสภาพแวดล้อมการคำนวณมาตรฐานเพื่อลดค่าใช้จ่ายในการฝึกอบรมและการจัดซื้อ POSIX เปิดตัวในปี 1988 เป็นกลุ่มมาตรฐาน IEEE ที่กำหนด API, เชลล์และยูทิลิตีอินเตอร์เฟสสำหรับระบบปฏิบัติการ แม้ว่าจะมุ่งไปที่ระบบที่คล้าย UNIX แต่มาตรฐานนั้นสามารถนำไปใช้กับระบบปฏิบัติการที่รองรับ ตอนนี้มาตรฐานเหล่านี้ได้รับการยอมรับแล้วผู้พัฒนาซอฟต์แวร์สามารถพัฒนาแอพพลิเคชั่นที่ทำงานบน UNIX, Linux,

จากหนังสือ: แนวทางปฏิบัติในการ Linux


4

Posix เป็นมากกว่าระบบปฏิบัติการมันเป็น "มาตรฐานระบบปฏิบัติการ" คุณสามารถจินตนาการว่ามันเป็นระบบปฏิบัติการจินตนาการซึ่งไม่มีอยู่จริง แต่มีเอกสารประกอบ เอกสารเหล่านี้เป็น "มาตรฐาน posix" ที่กำหนดโดย IEEE ซึ่งเป็นองค์กรมาตรฐานขนาดใหญ่ของสหรัฐอเมริกา ระบบปฏิบัติการที่ใช้งานข้อกำหนดนี้คือ "สอดคล้องกับ Posix"

กฎระเบียบของรัฐบาลต้องการโซลูชั่นที่สอดคล้องกับ Posix ในการลงทุนของพวกเขาดังนั้นการได้มาตรฐาน Posix จึงมีความได้เปรียบทางการเงินที่สำคัญโดยเฉพาะอย่างยิ่งสำหรับ บริษัท ไอทีขนาดใหญ่ในสหรัฐอเมริกา

รางวัลสำหรับระบบปฏิบัติการที่เป็นไปตาม posix อย่างสมบูรณ์ซึ่งเป็นการรับประกันว่ามันจะรวบรวมและเรียกใช้แอปพลิเคชันที่สอดคล้องกับ Posix ทั้งหมดอย่างราบรื่น

Linux เป็นที่รู้จักกันดีที่สุด OSX, Solaris, NetBSD และ Windows NT ก็มาเล่นที่นี่เช่นกัน ฟรีและ OpenBSD เป็นเพียง "เกือบ" สอดคล้องกับ Posix การปฏิบัติตามคำสั่ง posix ของ WinNT เป็นเพียงวิธีการแก้ปัญหาหลอกเพื่อหลีกเลี่ยงกฎระเบียบของรัฐบาลข้างต้น


3

มาตรฐานนี้ให้พื้นฐานทั่วไปสำหรับระบบปฏิบัติการแบบ Unix มันระบุว่าเชลล์ควรทำงานอย่างไรสิ่งที่คาดหวังจากคำสั่งเช่น ls และ grep และจำนวนไลบรารี C ที่ผู้เขียน C สามารถคาดหวังได้

ตัวอย่างเช่นไพพ์ที่ผู้ใช้บรรทัดคำสั่งใช้เพื่อรวมคำสั่งต่างๆเข้าด้วยกันถูกระบุในรายละเอียดที่นี่ซึ่งหมายความว่าฟังก์ชั่น popen (ไพพ์โอเพ่น) ของ POS เป็นมาตรฐาน POSIX ไม่ใช่ ISO C-standard


3

POSIX ย่อมาจาก Portable Operating System Interface และเป็นมาตรฐาน IEEE ที่ออกแบบมาเพื่ออำนวยความสะดวกในการพกพาแอปพลิเคชัน POSIX เป็นความพยายามโดยกลุ่มผู้ขายเพื่อสร้าง UNIX รุ่นมาตรฐานเดียว


0

POSIX กำหนดชุดมาตรฐานสำหรับระบบปฏิบัติการหรือโปรแกรม เป้าหมายคือการเขียนซอฟต์แวร์ใหม่ที่เข้ากันได้กับระบบเหมือน UNIX

ตัวอย่างเช่นโปรแกรมที่ทำงานบน Linux นั้นยังสามารถรวบรวมและเรียกใช้บนระบบที่คล้าย UNIX อื่น ๆ เช่น Solaris, HP-UX และ AIX เป็นต้น

ตัวอย่างที่ได้รับความนิยมมากที่สุดGNU Bashคือ POSIX 100% และgawkยูทิลิตี้


0

POSIX ควบคุมการทำงานร่วมกันพกพาและในพื้นที่อื่น ๆ เช่นการใช้งานและกลไกของส้อมสิทธิ์และมาตรฐานระบบแฟ้มเช่น / ฯลฯ / var / usr และอื่น ๆ ดังนั้นเมื่อนักพัฒนาเขียนโปรแกรมภายใต้ระบบที่เข้ากันได้กับ Posix เช่น Linux โดยทั่วไปไม่รับประกันว่าจะทำงานบนระบบที่เข้ากันได้กับ posix อื่นเช่นระบบ AIX ของ IBM หรือตัวแปรเชิงพาณิชย์อื่น ๆ ของ Unix Posix เป็นสิ่งที่ดีที่จะมีเช่นนี้มันช่วยลดการพัฒนาซอฟต์แวร์สำหรับการพกพาสูงสุดที่มันมุ่งมั่น หวังว่าคำตอบนี้สมเหตุสมผล

ขอบคุณ Jed Smith และ Tinkertim ที่ชี้ให้เห็นข้อผิดพลาดของฉัน - ของฉันไม่ดี !!! :(


มาตรฐานระบบไฟล์ได้รับการจัดการนอก POSIX
Jed Smith

คุณกำลังสับสน POSIX กับสิ่งต่าง ๆ เช่น LSB (ฐานมาตรฐาน Linux) สอง (ส่วนใหญ่) ระบบปฏิบัติการที่สอดคล้องกับ POSIX จะเป็น FBSD และ Linux แต่ทั้งคู่มีระบบไฟล์ที่แตกต่างกันและการติดตั้งไลบรารีเริ่มต้น
ทิมโพสต์

0

ข้อมูลจำเพาะ (พิมพ์เขียว) เกี่ยวกับวิธีทำให้ระบบปฏิบัติการใช้งานร่วมกับระบบปฏิบัติการ UNIX ปลายสายได้ (ขอให้พระเจ้าคุ้มครองเขา!) นี่คือเหตุผลที่ว่าทำไม macOS และ GNU / Linux จึงมีบรรทัดคำสั่งเทอร์มินัลคล้ายกัน GUI ของไลบรารี ฯลฯ เพราะทั้งคู่ได้รับการออกแบบตาม POSIX พิมพ์เขียว

POSIX ไม่ได้บอกวิศวกรและโปรแกรมเมอร์ว่าจะใช้รหัสอย่างไร แต่จะใช้รหัสอะไร


-1

ข้อเท็จจริงบางประการเกี่ยวกับ POSIX ที่ไม่ค่อยสดใส

POSIX ยังเป็นส่วนต่อประสานการโทรของระบบหรือ API และมีอายุเกือบ 30 ปี

มันถูกออกแบบมาสำหรับการเข้าถึงข้อมูลแบบอนุกรมไปยังที่จัดเก็บในเครื่องโดยใช้คอมพิวเตอร์เครื่องเดียวที่มีซีพียูเดี่ยว

การรักษาความปลอดภัยไม่ใช่ประเด็นสำคัญใน POSIX โดยการออกแบบซึ่งนำไปสู่การโจมตีสภาพการแข่งขันจำนวนมากในช่วงหลายปีที่ผ่านมาและบังคับให้โปรแกรมเมอร์ทำงานเพื่อแก้ไขข้อ จำกัด เหล่านี้

ข้อผิดพลาดที่ร้ายแรงยังคงถูกค้นพบข้อบกพร่องที่อาจได้รับการป้องกันด้วยการออกแบบ POSIX API ที่ปลอดภัยยิ่งขึ้น

POSIX คาดว่าผู้ใช้จะออกการโทรแบบซิงโครนัสครั้งละหนึ่งรายการและรอผลการโทรก่อนออกสายครั้งต่อไป โปรแกรมเมอร์วันนี้คาดว่าจะออกคำขอแบบอะซิงโครนัสจำนวนมากในแต่ละครั้งเพื่อปรับปรุงปริมาณงานโดยรวม

API แบบซิงโครนัสนี้ไม่ดีเป็นพิเศษสำหรับการเข้าถึงรีโมตและคลาวด์ออบเจ็กต์ซึ่งมีความหน่วงแฝงสูง


เคอร์เนล API แบบซิงโครนัสไม่จำเป็นต้องหมายถึงกระบวนการแบบเธรดเดี่ยวและ IO แบบอนุกรม มันไม่มีอะไรเกี่ยวข้องกับเครื่อง SMP สิ่งเหล่านี้ไม่เกี่ยวข้องอย่างสมบูรณ์ (ในขณะที่ฉันยอมรับว่า sync kernel API นั้นไม่ดีเท่าที่ควร แต่อย่างมากในโพสต์ของคุณ)
peterh - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.