코드 섹션을 텍스트 섹션이라고하는 이유는 무엇입니까?


14

코드가 포함 된 실행 파일 .text섹션을 섹션 이라고도합니다 . 세그먼트 메모리 아키텍처에서 코드로 매핑 된 세그먼트를 텍스트 세그먼트라고도합니다. "텍스트 파일 사용 중"( ETXTBSY)이라는 유닉스 오류 메시지 는 "이 파일은 실행중인 프로그램입니다"를 의미합니다.

텍스트 는 어떻게 실행 가능한 (machine) 코드 를 의미하게 되었습니까?

이상적인 대답은 다음과 같습니다. 단어와 그 의미 사이의 연관성을 설명합니다. 용어의 기원 또는 적어도 이력에 대한 인용을 제공하고; 어느 커뮤니티가 그것을 사용하는지에 대한 아이디어를 제공하십시오.


.text어셈블리 지시어입니다. 어셈블리는 텍스트입니다.
Austin Henley

6
비슷한 질문이 StackOverflow에서 3 년 전에 요청 및 답변되었습니다 :
Stephen C

@StephenC 링크 주셔서 감사합니다. "텍스트 세그먼트"를 검색하여 쉽게 찾을 수 있었지만 대부분 "텍스트 섹션"으로 시도했지만 표시되지 않았습니다. 따라서 그것은 GE 시대로 거슬러 올라갑니다. 그러나 그 의미가 어떻게 확립되었는지는 여전히 명확하지 않습니다.
Gilles 'SO- 악마 중지'10

답변:


5

이 용어는 어셈블리 언어에서 비롯된 것입니다. 어원을 확인할 수 없지만 이름이 다른 섹션 사용에서 비롯된 것 같습니다. 이 .data섹션은 실행 과정에서 변경 될 수있는 변수를 .text나타내지 만 , 섹션은 실행 중에 변경되지 않는 데이터를 포함하므로 필요한 경우 ROM에 넣을 수 있습니다. 따라서 코드에는 유용하지만 변경되지 않는 텍스트 문자열에도 유용합니다. 그것은 아마도 그 용어가 유래 한 곳일 것입니다.

퍼스트 클래스 함수에 대한 Griffin의 의견을 해결하려면 다음 python 3 코드를 고려하십시오.

def counter():
    x = 0
    def increment(y):
        nonlocal x
        x += y
        print(x)
    return increment

실제로 실행하는 코드 increment는 내부적으로 다음과 같이 보입니다.

self.func_dict['x'] += y
print(self.func_dict['x'])

이 실행 코드는 ROM에 넣을 수 있습니다. 호출 횟수에 관계없이 프로그램 실행 전체에서 변경되지 않습니다 counter(). 무엇 합니까 변화하는 것은입니다 self포인터와 멤버 변수. 그것들을 넣어야합니다 .data. 일 때 return increment실제로 증가 함수 객체의 새 인스턴스를 반환합니다. 매번 새로운 실행 코드를 동적으로 작성하지는 않습니다. 포인터는 아니지만 코드 자체는 변경할 수 없습니다.

섹션에 저장 해야하는 유일한 코드 는 프로그램 시작시 컴파일러 또는 JIT 컴파일러에 알려지지 않았기 때문에에 .data의해 생성 된 eval()것입니다. 그러나 그 코드조차도 불변입니다. 문자열을 변경하고 eval()다시 호출 하면 이전에 호출 한 시간에서 코드가 변경되지 않고 eval()완전히 새로운 코드 세트가 생성됩니다.

프로그래밍 모델이 코드가 변경 가능한 것처럼 느껴지더라도, 프로세서 명령 레벨에서 실제 자체 수정 코드는 위험하며 프로세스 컨텍스트 전환과 같은 OS 부두 주제 외부에서는 거의 발견되지 않습니다.


따라서 코드가 변경 가능 / 1 등석 인 것을 고려하여 기능 언어를 사용하면 어떻게됩니까?
그리핀

1
일급 함수에 대한 편집 내용을 참조하십시오.
Karl Bielefeldt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.