Блогчетање

Данилово блогче

Fri, 30 Jan 2004

Хм, разгледајући веб и тражећи понешто о страничењу, Гугл ме посла и на Елитсекјурити форуме. Тамо се расправља о разликама између сегментирања и страничења, или о врстама језгара оперативних система.

Оно што је мени занимљиво сада је да напоменем које су то разлике између сегментирања и страничења, бар на Интеловим процесорима, пошто о њима једино понешто и знам.

На првом месту, сегментирање је обавезно на Интеловим процесорима — оно се не може искључити, већ се једино може привидно заобићи тако што се направе сегменти за код, податке, стек исте величине, и са истим положајем.

Страничење, са друге стране, обезбеђује виртуелни адресни простор, и то је основни разлог зашто се оно чешће користи од сегментирања. Па, можда вас занима чему служи виртуелни адресни простор?

Виртуелни адресни простор своју примену најчешће има у обезбеђивању „размене/замене за меморију“ (на енглеском „swap“, што говори о техничком начину изведбе овога: страница у меморији се размењује са страницом уписаном на диску) помоћу неког јефтинијег уређаја, као што је диск. На неким системима ово зову и „виртуелна меморија“, али то се не слаже са општеприхваћеном употребом.

Ваља поменути и да странице на Интел процесорима новијим од Пентијума могу бити и 4МБ, чиме се обезбеђује знатно већи адресни простор, а у ограниченом пољу примена и већа брзина.

Сегментирање, са друге стране, је одличан механизам у који је уложено много више труда и напора при стварању Интел процесора. Једина, условно речено, „мана“ у односу на страничење је што не користи блокове утврђене величине, и самим тим је проналажење одговарајућег сегмента операција која се обавља у два корака (1. погледај где се налази тражени сегмент; 2. припреми тај сегмент за употребу — код страничења се положај странице имплицира њеном адресом [мада у пракси, и то захтева једно гледање у табелу], и она се може одмах „довући“).

Као и странице, и сегменти се могу користити за обезбеђивање „размене за меморију“, и то са много бољим учинком, зато што је један сегмент углавном посвећен једном процесу, и много је већа вероватноћа да ће баш подаци из њега требати ускоро (наравно, ово значи да је потребно уложити и много више труда у развој распоређивача процеса на вишепрограмским системима, и одредити оптималну политику избора сегмената за довлачење, њихов редослед, итд. пошто је једна грешка много скупља од погрешно довучене странице).

Оно што говори о супериорности сегмената у односу на странице је то што је могуће сегменте додељивати на произвољан начин, и то било као „глобалне“ (уписане у глобалну табелу описника, тј. GDT) или „локалне“ (за појединачни процес, дефинисан помоћу TSS-а, а ово се уписује у засебну табелу за сваки од таквих процеса: LDT).

И где је овде предност сегмената у односу на странице? Као прво, раздвајањем сваког дела оперативног система, корисничке спреге, и корисничких програма у засебне сегменте аутоматски повећава безбедност — нпр. драјвер (гонич :) не може да приступи осталим услугама језгра, или меморији других драјвера и програма (иначе, садашњи оперативни системи то решавају тако што користе друге могућности Интел процесора за заштиту, као што је „ниво рада“, где се нулти ниво резервише за језгро; ово, наравно, не чува друге програме до самог језгра). Ово је хардверски безуслован начин да се обезбеди заштита меморије.

А одговор на питање зашто се страничење ипак много више користи од сегментирања је веома једноставан и сигурно се може назрети и изнад: пристојну политику додељивања страница је много лакше направити од политике сегментирања која би донела значајна побољшања. А уз то, што се тиче безбедности, још увек преовладавају условни (а не безусловни) механизми забране приступа, и иако се са њима иде све даље — они су кривци за већину модерних проблема са програмима.

Са практичне стране, сегментирањем се може постићи исто што и страничењем, док обрнуто није случај. Када се користе заједно, може се рећи да је страничење „испод“ сегментирања, тј. сегменти су одређени у односу на виртуелни адресни простор постављен страничењем.

На несрећу, већина језгара је одлучила да поједностави што је више могуће основну спрегу са процесором, па тако имамо случај где нпр. у Линукс језгру није могуће омогућити процесу директан приступ У/И портовима већим од одређеног броја, зато што њихова битмапа није стала у једну меморијску страницу (тј. 4КБ, односно У/И портови преко 0x8000) заједно са TSS-ом (ово је било тачно бар до 2.2 серије, али сумњам да је ишта измењено од тада). На тај начин, софтвер намеће ограничења ради једноставности израде, иако хардвер нуди много више.

Жеља ми је да једног дана нађем више времена да о овоме размислим, и покушам можда да направим и прототип језгра које ће увелико користити сегментирање. Е па, зато и сва ова писанија — не желим да заборавим на све ово у потпуности :)

[17:24] | [/os] | # | G | | TB
Contact
Danilo Segan

This is blog (web log) of Danilo Šegan (or Данило Шеган).

Archives
2017-Jan
2013-Dec
2011-Nov
2011-Oct
2011-Aug
2011-Jul
2011-Jun
2011-May
2010-Oct
2010-Aug
2010-Jul
2010-Apr
2010-Mar
2010-Feb
2010-Jan
2009-Dec
2009-Oct
2009-Aug
2009-Jun
2008-Oct
2008-Aug
2008-Jul
2008-Jun
2008-May
2008-Apr
2008-Mar
2008-Feb
2007-Dec
2007-Oct
2007-Aug
2007-Jul
2007-May
2007-Apr
2007-Feb
2007-Jan
2006-Nov
2006-Oct
2006-Aug
2006-Jul
2006-Apr
2006-Mar
2006-Feb
2006-Jan
2005-Sep
2005-Jun
2005-May
2005-Apr
2005-Mar
2005-Feb
2004-Dec
2004-Nov
2004-Oct
2004-Sep
2004-Aug
2004-Jul
2004-May
2004-Apr
2004-Mar
2004-Feb
2004-Jan
2003-Dec
2003-Nov
2003-Oct
2003-Sep
1983-Mar

< January 2004 >
MoTuWeThFrSaSu
    1 2 3 4
5 6 7 8 91011
12131415161718
19202122232425
262728293031 
Categories

Links
Kvota.net
Prevod.org
My study page
Srpski.org
GNOME
Friends' Blogs
alex (en)
bc (en)
Bojan Živanović (sr)
Carlos (en)
Goran (sr)
imp (sr)
lilit (sr)
Oskuro (en)
Zombie (sr/en)
Feeds
RSS