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

อ่าน 2 นาที

สบรค

การจัดการหน่วยความจำ/API ระบบปฏิบัติการ

brkและ sbrk เป็นการ เรียกใช้ระบบจัดการหน่วยความจำพื้นฐานที่ใช้ใน ระบบปฏิบัติการ Unixและ ระบบปฏิบัติการ ที่คล้าย Unixเพื่อควบคุมปริมาณหน่วยความจำที่จัดสรรให้กับส่วนฮีปของกระบวนการ

สบรค

brkและ sbrk เป็นการ เรียกใช้ระบบจัดการหน่วยความจำพื้นฐานที่ใช้ใน ระบบปฏิบัติการ Unixและ ระบบปฏิบัติการ ที่คล้าย Unixเพื่อควบคุมปริมาณหน่วยความจำที่จัดสรรให้กับส่วนฮีปของกระบวนการ [ 1 ] โดยทั่วไปฟังก์ชันเหล่านี้จะถูกเรียกจากฟังก์ชันไลบรารีการจัดการหน่วยความจำระดับสูงกว่า เช่น mallocในระบบ Unix ดั้งเดิมและเป็นวิธีเดียวที่แอปพลิเคชันจะได้รับพื้นที่ฮีปเพิ่มเติม เวอร์ชันต่อมาอนุญาตให้ทำเช่นนี้ได้โดยใช้การเรียก mmap [ 2 ] [ 3 ]พบได้ในส่วนหัว <unistd.h>ในไลบรารี C POSIXbrk()sbrk()

คำอธิบาย

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

sbrkและbrkถือว่าเป็นระบบเก่าแม้กระทั่งตามมาตรฐานปี 1997 ( Single UNIX Specification v2 หรือ POSIX.1-1998) [ 5 ]ระบบเหล่านี้ถูกลบออกใน POSIX.1-2001 [ 6 ]

ลายเซ็นฟังก์ชันและพฤติกรรม

int brk ( void * end_data_segment ); void * sbrk ( intptr_t increment );

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

เมื่อดำเนินการสำเร็จbrkซับรูทีนจะส่งคืนค่า 0 และ ซับรูทีนจะส่งคืนค่าก่อนหน้าของการหยุดโปรแกรม (หากพื้นที่ว่างเพิ่มขึ้น ค่าก่อนหน้านี้จะชี้ไปยังจุดเริ่มต้นของพื้นที่ใหม่ด้วย) หากซับรูทีนใดซับรูทีนหนึ่งไม่สำเร็จ จะส่งคืนsbrkค่า และ ตัวแปรส่วนกลางerrnoจะถูกตั้งค่าเพื่อระบุข้อผิดพลาด[ 5 ]−1

ไม่ใช่ทุกระบบที่คล้าย Unix ที่จะยอมรับแนวคิดของการให้ผู้ใช้ควบคุมส่วนข้อมูลการใช้งานMac OS Xsbrkเป็นการจำลองและมีการจัดสรรสูงสุด 4 เมกะไบต์ ในการเรียกใช้ครั้งแรก พื้นที่ขนาดนี้จะถูกจัดสรรเพื่อเก็บส่วนจำลอง เมื่อถึงขีดจำกัดนี้ จะส่งคืนค่า −1 และerrnoตั้งค่าเป็นENOMEM. brkมักจะเกิดข้อผิดพลาด[ 7 ]

รหัสข้อผิดพลาด

ข้อผิดพลาดENOMEMจะถูกตั้งค่าและพื้นที่ที่จัดสรรไว้จะไม่เปลี่ยนแปลง หากเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้เป็นจริง:

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Sbrk&oldid=1358600711 "

สรุปเนื้อหา

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

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

brkและ sbrk เป็นการ เรียกใช้ระบบจัดการหน่วยความจำพื้นฐานที่ใช้ใน ระบบปฏิบัติการ Unixและ ระบบปฏิบัติการ ที่คล้าย Unixเพื่อควบคุมปริมาณหน่วยความจำที่จัดสรรให้กับส่วนฮีปของกระบวนการ

คำอธิบาย

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

ลายเซ็นฟังก์ชันและพฤติกรรม

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

รหัสข้อผิดพลาด

ข้อผิดพลาด ENOMEM จะถูกตั้งค่าและพื้นที่ที่จัดสรรไว้จะไม่เปลี่ยนแปลง หากเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้เป็นจริง: