자기배분

Self-relocation

컴퓨터 프로그래밍에서, 자기배분 프로그램은 실행될 때 자신의 주소 의존적 명령과 데이터를 다시 위치시키는 프로그램이며, 따라서 어떤 주소의 메모리에 로딩될 수 있다.[1][2]많은 경우에 있어서, 자기배분 코드는 또한 자기수정 코드의 한 형태이기도 하다.

개요

자기배치는 프로그램을 외부 저장장치에서 메인 메모리로 복사할 때 링커로더사용하는 재배치 과정과 유사하며, 다른 점은 재배치를 수행하는 운영체제의 로더보다는 로드된 프로그램 그 자체라는 점이다.

한 가지 형태의 자기 재분배는 프로그램이 명령의 코드를 한 위치의 한 시퀀스에서 한 컴퓨터의 주 메모리 내의 다른 위치의 다른 시퀀스로 복사한 다음, 메모리의 소스 위치에서 찾은 명령에서 목적지 위치에서 찾은 명령으로 프로세서 제어를 전송할 때 발생한다 o.f 메모리이와 같이, 프로그램의 알고리즘에 의해 운용되는 데이터는 프로그램을 정의하는 바이트의 순서다.

정적 자기 배분은 일반적으로 로딩 시간(운영 체제가 소프트웨어를 로드하고 제어권을 이 소프트웨어에 전달했지만, 초기화가 완료되기 전)에 수행되기도 한다. 때로는 런타임 중 이후 단계에서 프로그램의 구성을 변경할 때도 있다.[3][4]

부트 로더

예를 들어 IBM PC 호환성과 같은 아키텍처에서 부팅스트래핑 운영 체제의 초기 단계에서 자주 자체 재할당(마스터 부트 레코드(MBR), 볼륨 부트 레코드(VBR) 및 DOS와 같은 운영 체제의 초기 부팅 단계가 로딩하기 위해 자체적으로 이동하는 경우가 있다.e 다음 단계를 기억하라.

CP/M 확장

CP/M 아래에서 디버거 DDT(동적 디버깅 툴)는 실행할 프로그램의 TPA(Transient Program Area)를 극대화하기 위해 페이지 경계 재배치를 통해 가용 메모리 상단으로 동적으로 이동했다.[5][6]

1988년에 Z-시스템에 대한 대체 명령줄 프로세서 ZCPR 3.4는 내장된 스텁을 통해서도 자체 연결이 가능한 소위 유형 4 프로그램을 도입하였다.[7][8][9][10][11]

x86 DOS 드라이버

DOS, self-relocation은 때때로 자신들 상위 메모리에 더 효과적으로 가능했던 것보다 LOADHIGH/HILOAD, INSTALLHIGH/HIINSTALL 또는 DEVICEHIGH/HIDEVICE( 같은 외부적으로 제공되"고등"-loaders에"고등"더 발달된 드라이버와 RSXs/TSRs 적재 등에서 사용됩니다[12]이후 도스 5)에 주문을 극대화는 메모리 응용 프로그램이다.이는 운영체제가 탑재할 드라이버의 내부작업에 대한 지식이 없기 때문에 초기화 후 해제되더라도 초기화 코드를 포함하여 드라이버 전체를 블록으로 고정할 수 있을 만큼 충분히 큰 여유 메모리 영역에 로딩해야 하는 것으로 귀결된다.TSR의 경우 운영 체제는 PSP(프로그램 세그먼트 접두사)와 환경 세그먼트도 할당해야 한다.[13]이로 인해 드라이버가 가장 적합한 여유 메모리 영역에 로드되지 않거나 높은 곳에 로드되지 않을 수 있다.이와는 대조적으로, 자가 배치 드라이버는 (기존 메모리를 포함하여) 어느 곳에나 로딩될 수 있으며, 그 다음 (일반적으로 훨씬 더 작은) 상주 부분만 상위 메모리의 적절한 여유 메모리 영역으로 재배치할 수 있다.또한 고급 자가 배치 TSR(운영 체제에 의해 상위 메모리에 이미 로드된 경우에도)은 대부분의 자체 PSP 세그먼트와 명령줄 버퍼에 걸쳐 재배치할 수 있으며, 결과 메모리 설치 공간을 더욱 줄이고 단편화를 방지할 수 있도록 환경 세그먼트를 해제할 수 있다.[14]TSR을 자동 배치하는 일부 TSR은 원래 TSR로 로드되어도 "자연"을 동적으로 변경하여 장치 드라이버로 변환할 수 있으므로 일반적으로 메모리도 확보한다.[4]외부를 로더 확장 메모리(EMS), 상위 메모리 영역(해병 공격 헬기 대대)또는 확장 기억(DPMS 또는 CLOAKING을 통해)로 운전자들 이사하기로 위해 이전 대상에 액세스 area,[15]는 경우에는 nb을 조정하기 때문에 이러한 방법 작은 클릭하면 드라이버별 stubs 또는 상단 전통적인 기억에 남으라고 한다 마지막으로, 그것이 법적으로는 불가능하다고 한다.1][nb 2]이고,장치 드라이버의 경우 또한 드라이버 헤더는 항상 첫 번째 메가바이트에 있어야 하기 때문이다.[15][13]이를 달성하기 위해 운전자는 이러한 영역에 대한 자기 배분을 지원하도록 특별히 설계되어야 한다.[15]

또한 일부 고급 DOS 드라이버는 내부적으로 공통 코드 부분을 지방 바이너리로 공유하는 장치 드라이버(운영 체제에 의해 오프셋 +0000h에서 로드됨)와 TSR(오프셋 +0100h에서 로드됨)을 모두 포함한다.[13]공유 코드가 위치 독립적으로 설계되지 않은 경우, 이미 재배치된 로더에 의해 수행되었을 것과 유사한 내부 주소 수정 작업이 필요하다. 이는 자체 재지정 수정 단계와 유사하지만 운영 체제의 로더에 의해 대상 위치에 이미 로드된 코드().운전자가 직접 하지 않고).

IBM DOS/360 및 OS/360 프로그램

IBM DOS/360은 로딩 중에 프로그램을 재배치할 수 있는 능력이 없었다.때로는 프로그램의 여러 버전이 유지되었고, 각 버전은 서로 다른 부하 주소(파티션)를 위해 구축되었다.자기 재배치 프로그램이라고 불리는 특별한 등급의 프로그램은 로딩 후 스스로 재배치하도록 코딩되었다.[16]IBM OS/360은 실행 가능한 프로그램을 메모리에 로드할 때 재배치했다.프로그램의 사본 하나만 필요했지만, 일단 로드되면 프로그램을 이동할 수 없었다(그래서 일회성 위치 독립 코드라고 한다).

기타 예

동적 자기배분이라고도 하는 (다회) 자기배분의 극단적인 예로서, 웜 메모리 테스트에 사용되는 것과 같이 실행될 때에도 메모리에 고정된 주소에 머무르지 않도록 컴퓨터 프로그램을 구축할 수 있다.[17][18][19][20]애플 웜은 또한 역동적인 자기 조정자이기도 하다.[21]

참고 항목

메모들

  1. ^ 스텁 요구사항의 예외는 확장 메모리EMSUMB를 통해 메모리 관리자에 의해 영구 상위 메모리로 변환되어 EMS가 아닌 상위 메모리로 효과적으로 액세스되는 경우다.
  2. ^ 드라이버가 HMA에 로드되기 위한 스텁 요구 사항에는 두 가지 예외가 있다. 게이트 A20 로직 없는 기계에서 높은 메모리를 영구적으로 활성화하는 경우에는 스텁이 필요하지 않지만, 일반적으로 이 조건이 충족되지 않기 때문에 일반 DOS 드라이버는 스텁을 이용할 수 없다(이 조건에 대해 명시적으로 사전에 테스트하지 않는 한).그렇지 않으면 커널 게이트 A20 핸들러가 스텁의 기능을 제공하도록 커널 공간의 인터럽트 체인에 백도어 인터페이스를 활용하여 후크할 수 있기 때문에 (SHARENLSFUNC와 같은) 상주 시스템 확장자가 멀티플렉스 인터럽트 INT 2Fh만 후크할 때 DR DOS 6.0 이상에서는 스텁이 필요하지 않다.그래도 운전자는 HMA에서 올바르게 작동하기 위해 자기 배정을 수행해야 한다.[a]

참조

  1. ^ Dhamdhere, Dhananjay M. (1999). Systems Programming and Operating Systems. New Delhi: Tata McGraw-Hill Education. p. 232. ISBN 0-07-463579-4. Archived from the original on 2020-02-01. Retrieved 2011-11-08. (658쪽)
  2. ^ Dhamdhere, Dhananjay M. (2006). Operating Systems: A Concept-based Approach. New Delhi: Tata McGraw-Hill Education. p. 231. ISBN 0-07-061194-7. Archived from the original on 2020-02-20. Retrieved 2020-02-20. (799페이지)
  3. ^ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB - Enhanced DOS keyboard and console driver (User Manual) (6.5 ed.) [1] (NB).FreeKEYB는 대부분의 키보드 레이아웃, 코드 페이지국가 코드를 지원하는 유니코드 기반의 동적으로 구성 가능한 드라이버다.운전자는 기성품 매크로 조립자뿐만 아니라 자동 사전 및 사후 처리 분석 툴의 프레임워크를 활용하여 바이너리 코드로더와 함께 실행 파일에 내장될 코드 모핑 메타 데이터를 생성하여 자체 디스패치, 릴렉스재배치할 수 있도록 지원하며, 다양한 로더TSR 또는 장치 드라이버로서 Elf를 구현하며 고급 자기 재할당 기법(일반 DOS 메모리, UMB, 미사용 비디오 메모리 또는 원시 메모리로도 프로그램 접두사 세그먼트 과부하 및 환경 세그먼트 재조합을 활용함) 및 로드 시 바이트 레벨의 세분화된 동적 데드코드 제거자체 수정 코드와 r하드웨어, 운영 체제 및 드라이버 구성, 선택한 기능 세트 및 로케일에 따라 메모리 설치 공간을 최소화하기 위한 런타임의 구성성)
  4. ^ a b Paul, Matthias R.; Frinke, Axel C. (2006-01-16), FreeKEYB - Advanced international DOS keyboard and console driver (User Manual) (7 (preliminary) ed.)
  5. ^ Kildall, Gary Arlen (February 1978) [1976]. "A simple technique for static relocation of absolute machine code". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia. People's Computer Company. 3 (2): 10–13 (66–69). ISBN 0-8104-5490-4. #22 ark:/13960/t8hf1g21p. Retrieved 2017-08-19. [2][3][4].원래 킬 달:에서 제공된 게리 Arlen[22–24 11월 1976년](1977년)."심플 기법 정적 재배치 절대 머신의 번호에 대해".해군 대학원 학교, 몬트레이, 캘리포니아, 미국에서. 티투스, 해럴드 A(교육.)에서 쓰여진.회의 기록:10회 아실 로마 회의 전기 회로, 시스템과 컴퓨터에 서류를 11월 22–24, 1976년 Presented.아실 로마 학회 호텔과 회의를 이용한 캘리포니아 PacificGrove에 사는, USA:서양 Periodicals 회사입니다.를 대신하여 서명함. 420–424.ISSN 1058-6393..(609페이지)2021-12-06 Retrieved.(이 "resize" 방법인 페이지 경계 재배치는 실행할 프로그램의 TPA를 최대화하기 위해 MOVCPM [pl]을 사용하여 CP/M-80 디스크 이미지에 정적으로 적용할 수 있다.또한 CP/M 디버거 DDT(동적 디버깅 툴)에 의해 동적으로 활용되어 높은 메모리로 자체 재배치되었다.IMS AssociatesBruce H. Van Natta에 의해 같은 접근법이 다시 연결 가능한 PL/M 코드를 생산하기 위해 독자적으로 개발되었다.문단 경계 재배치는 나중에 DR DOS 6.0 이상에 따라 KEYB, SHARE, NLSFUNC와 같은 TSR을 동적으로 재배치함으로써 이 방법의 또 다른 변종이 이용되었다.다소 유사한 접근법에 기초한 훨씬 더 정교하고 바이트 수준의 세분화된 오프셋 재배치 방법은 마티아스 R. 폴과 액셀 C에 의해 독자적으로 구상되고 구현되었다.거주 드라이버 및 TSR(FreeKEYB 등)의 런타임 설치 공간을 동적으로 최소화하기 위한 동적 데드코드 제거 기능.
  6. ^ Huitt, 로버트, 유뱅크스. 미국, 고든, Rolander, 토마스"톰"앨런, 법학, 데이비드, 미셸, 하워드 E., 한라, 브라이언, 와튼, 존 해리슨, 베르크, 브라이언, 수애, Weilian, 킬 달, 스콧, Kampe, 빌(2014-04-25).법률, 데이비드(교육.).게리 킬 달의 "유산:그 CP/M IEEE마일스톤 Dedication"(PDF)(비디오 transscription).캘리포니아 PacificGrove에 사는, USA:컴퓨터 역사 박물관입니다.CHM 참조 번호:X7170.2014.그 2014-12-27에 원래에서Archived(PDF).2020-01-19 Retrieved.[…]법:그 후속 OS보다도[…]"동적 재배치".당신은 그리고 그것이 왜 중요한지 뭔지 말해 주시겠어요?[…]Eubanks:[…][…]다[…] 아득할 정도로 방대한 게리가 뭐 했다.[…]나는 날 학교에서 그는 건강한 실험실로 그는, 나는 어떻게 이전하는 방법을 알아내고 있다고 말했다 왔어요.그는 유일한 바이트 항상 높은 계급 바이트를 가는지 이용했다.그래서 그는 비트 맵을 만들었다.[…]은 컴퓨터가 있다면 얼마나 많은 메모리 문제가 되지 않았습니다, 운영 체제 항상 높은 메모리로 옮길 수 있었을 것.따라서, 당신은 메모리의 다른 양의 기계에 이[…]상용화할 수 있다.[…]당신은 64KCP/M고 47K CP/M을 팔고 있을 수가 없었다.그것은 단지 주소에서 힘든 컴파일을 가지고 있는 것은 우스운 일일어요.Gary어느 날 밤, 밤 약간의 코딩 것에 대해 생각하는 중간에, 이거 정말 CP/M 가능한 상업화하게 알아냈다.나는 정말 이 이전 조치지 않곤 아주 어려운 문제라고 생각합니다.사람들은 사게 하기 위해, 그것이 보이고, 좀 더 기억이라고 덧붙였다 당신은 다른 운영 제도를 가야 할 복잡합니다.[…]인텔[…]은 바이트, 메모리 주소에 대해 권리를 번복했다.있어서 당신은 256바이트 경계에 정확히는 이것의 이전을 하지만 그들은 항상 똑같은 곳에 있었다.그래서 항상 자들이[…]법:내가 동적 재배치의[5][6](33페이지)[…] 했던 확실하게 가장 감동적인 설명의 비트 맵으로 집을 마련할 수 있다.
  7. ^ Sage, Jay (May–June 1988). Carlson, Art (ed.). "ZCPR 3.4 - Type-4 Programs". The Computer Journal (TCJ) - Programming, User Support, Applications. ZCPR3 Corner. Columbia Falls, Montana, USA (32): 10–17. ISSN 0748-9331. ark:/13960/t1wd4v943. Retrieved 2021-11-29. [7][8]
  8. ^ Mitchell, Bridger (July–August 1988). Carlson, Art (ed.). "Z3PLUS & Relocation - Information on ZCPR3PLUS, and how to write self relocating Z80 code". The Computer Journal (TCJ) - Programming, User Support, Applications. Advanced CP/M. Columbia Falls, Montana, USA (33): 9–15. ISSN 0748-9331. ark:/13960/t36121780. Retrieved 2020-02-09. [9][10]
  9. ^ Sage, Jay (September–October 1988). Carlson, Art (ed.). "More on relocatable code, PRL files, ZCPR34, and Type-4 programs". The Computer Journal (TCJ) - Programming, User Support, Applications. ZCPR3 Corner. Columbia Falls, Montana, USA (34): 20–25. ISSN 0748-9331. ark:/13960/t0ks7pc39. Retrieved 2020-02-09. [11][12][13]
  10. ^ Sage, Jay (January–February 1992). Carlson, Art; McEwen, Chris (eds.). "Ten Years of ZCPR". The Computer Journal (TCJ) - Programming, User Support, Applications. Z-System Corner. S. Plainfield, New Jersey, USA: Socrates Press (54): 3–7. ISSN 0748-9331. ark:/13960/t89g6n689. Retrieved 2021-11-29. [14][15][16]
  11. ^ Sage, Jay (May–June 1992) [March–June 1992]. Carlson, Art; McEwen, Chris (eds.). "Type-3 and Type-4 Programs". The Computer Journal (TCJ) - Programming, User Support, Applications. Z-System Corner - Some New Applications of Type-4 Programs. S. Plainfield, New Jersey, USA: Socrates Press (55): 13–19. ISSN 0748-9331. ark:/13960/t4dn54d22. Retrieved 2021-11-29. [17][18]
  12. ^ "Chapter 10 Managing Memory". Caldera DR-DOS 7.02 User Guide. Caldera, Inc. 1998 [1993, 1997]. Archived from the original on 2017-08-30. Retrieved 2017-08-30.
  13. ^ a b c Paul, Matthias R. (2002-04-06). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev. Archived from the original on 2020-02-07. Retrieved 2020-02-07. […] Add a SYS device driver header to the driver, so that CTMOUSE could be both in one, a normal TSR and a device driver - similar to our FreeKEYB advanced keyboard driver. […] This is not really needed under DR DOS because INSTALL= is supported since DR DOS 3.41+ and DR DOS preserves the order of [d]config.sys directives […] but it would […] improve the […] flexibility on MS-DOS/PC DOS systems, which […] always execute device= directives prior to any INSTALL= statements, regardless of their order in the file. […] software may require the mouse driver to be present as a device driver, as mouse drivers have always been device drivers back in the old times. These mouse drivers have had specific device driver names depending on which protocol they used ("PC$MOUSE" for Mouse Systems Mode for example), and some software may search for these drivers in order to find out the correct type of mouse to be used. […] Another advantage would be that device drivers usually consume less memory (no environment, no PSP) […] It's basically a tricky file header, a different code to parse the command line, a different entry point and exit line, and some segment magics to overcome the ORG 0 / ORG 100h difference. Self-loadhighing a device driver is a bit more tricky as you have to leave the driver header where it is and only relocate the remainder of the driver […]
  14. ^ 폴, 마티아스 R.(2001-08-18)."Re:GRAFTABL과 디스플레이에[fd-dev].곧 또 보자( 있었습니까:프리 도스에서 변경하면 codepages)". freedos-dev.그 2017-09-04에 원래에서 Archived.2017-09-04 Retrieved.[…]적어도는 MS-DOS6.0+ GRAFTABL의 PSP세그먼트의 부분을 자체 지역으로 이전한다면은 거주하는 크기를 최소화하기 위해(오프셋 +60h 보고 위쪽).[…](NB다.Apost-DR-DOS 7.03 GRAFTABL 2.00+.)동적 self-relocation을 지원한다.
  15. ^ a b c 폴, 마티아스 R.(2002-02-02)."Treiber dynamisch nachladen"[Loading 운전자 동적으로](독일어로).뉴스:de.comp.os.msdos.그 2017-09-09에 원래에서 Archived..(NB다. 도스에서load-high 방법에 대한 개요를 제공하 LOADHIGH 등 명령과self-relocating 방법의 UMBs에 사용은 XMSUMB API를 활용하는 등 2017-07-02 Retrieved.또한 TSR이 세그먼트 내 오프셋 재배치를 활용하여 HMA로 이전하는 데 필요한 보다 정교한 방법에 대해서도 논의한다.)
  16. ^ Boothe Management Systems (1972-11-01). "Throughput - Are you getting all you deserve? - DOSRELO". Computerworld - The Newsweekly For The Computer Community (advertisement). Vol. VI, no. 44. San Francisco, California, USA: Computerworld, Inc. p. 9. Archived from the original on 2020-02-06. Retrieved 2020-02-07. […] DOSRELO provides a method of making DOS problem programs self-relocating. DOSRELO accomplishes the self-relocation capability for all programs, regardless of the language, by adding entry point logic to the object code of the program before the Linkage Editor catalogs it on the Core Image Library. […]
  17. ^ The Worm Memory Test (PDF). Vector Graphic. 2015-10-21. Archived (PDF) from the original on 2019-05-15. Retrieved 2021-12-13. (3페이지) (NB. Vector Graphic 3 서비스 매뉴얼 참조)
  18. ^ Wilkinson, William "Bill" Albert (2003) [1996, 1984]. "The H89 Worm: Memory Testing the H89". Bill Wilkinson's Heath Company Page. Archived from the original on 2021-12-13. Retrieved 2021-12-13. […] Besides fetching an instruction, the Z80 uses half of the cycle to refresh the dynamic RAM. […] since the Z80 must spend half of each instruction fetch cycle performing other chores, it doesn't have as much time to fetch an instruction byte as it does a data byte. If one of the RAM chips at the memory location being accessed is a little slow, the Z80 may get the wrong bit pattern when it fetches an instruction, but get the right one when it reads data. […] the built-in memory test won't catch this type of problem […] it's strictly a data read/write test. During the test, all instruction fetches are from the ROM, not from RAM […] result[ing] in the H89 passing the memory test but still operating erratically on some programs. […] This is a program that tests memory by relocating itself through RAM. As it does so, the CPU prints the current address of the program on the CRT and then fetches the instruction at that address. If the RAM ICs are okay at that address, the CPU relocates the test program to the next memory location, prints the new address, and repeats the procedure. But, if one of the RAM ICs is slow enough to return an incorrect bit pattern, the CPU will misinterpret the instruction and behave unpredictably. However, it's likely that the display will lock up showing the address of faulty IC. This narrows the problem down eight ICs, which is an improvement over having to check as much as 32. […] The […] program will perform a worm test by pushing an RST 7 (RESTART 7) instruction from the low end of memory on up to the last working address. The rest of the program remains stationary and handles the display of the current location of the RST 7 command and its relocation. Incidentally, the program is called a worm test because, as the RST 7 instruction moves up through memory, it leaves behind a slime trail of NOPs (NO OPERATION). […]
  19. ^ 스타인 먼 1월 W.(1986-09-01).웨스트 린 미국 오레곤 주."그 웜 기억력 시험"에 쓰여진.우익.(TRTA).박사 Dobb의 저널 소프트웨어 도구의 전문 프로그래머.캘리포니아 주 레드 우드시, USA:M&T출판사, Inc. /는 컴퓨터사. 11(9):114–115(662–663).ISSN 1044-789X.#119. 궤:/13960/t74v34p9p CODEN DDJOEB.2021-12-13 Retrieved.{{ 들고 일기}}:CS1 maint:url-status(링크)[19](2페이지).
  20. ^ 스타인 먼 1월 W.(1986년)."III. 유용한 68000Routines와 기법과 16이죠.그 웜 메모리 Test"(PDF).WestLinn은 오리건 주 68000프로그래밍은 미국 박사는 Dobb의 Toolbook에 쓰여진.미국 뉴욕:브래디 북/프렌티스 홀 출판부/사이먼&슈스 테르, 주식 회사를 대신하여 서명함. 341–350.아이 에스비엔 0-13-216649-6. LCCN 86-25308.그 2021-12-13에 원래에서Archived(PDF)..(1+5+10+1 페이지)2021-12-13 Retrieved
  21. ^ Dewdney, Alexander Keewatin (March 1985). "Computer Recreations - A Core War bestiary of viruses, worms and other threats to computer memories". Scientific American. 285: 38–39. Archived from the original on 2017-07-04. Retrieved 2017-07-04.

추가 읽기