부트 스트래핑이란 무엇입니까?
나는 애플리케이션 개발에 대한 논의에서 언급 된 "부트 스트랩"을 계속 봅니다. 널리 퍼져 있고 중요해 보이지만 실제로 부트 스트래핑이 무엇인지에 대한 잘못된 설명조차 아직 발견하지 못했습니다. 오히려 모든 사람이 그것이 의미하는 바를 알아야하는 것처럼 보입니다. 그래도 그렇지 않습니다. 내가 알 수 있듯이, 그것은 시작시 응용 프로그램에 필요한 초기화 작업과 관련이 있지만 완전히 틀릴 수 있습니다. 누구든지이 아이디어를 이해하도록 도울 수 있습니까?
"부트 스트랩"은 "자신의 부트 스트랩으로 자신을 끌어 당기는"용어에서 비롯됩니다. Wikipedia 에서 얻을 수있는만큼 .
컴퓨팅에서 부트 스트랩 로더는 머신이 시작될 때 실행되는 첫 번째 코드이며 나머지 운영 체제를로드하는 역할을합니다. 현대 컴퓨터에서는 ROM에 저장되지만 PDP-11의 부트 스트랩 프로세스를 기억합니다. 여기서는 전면 패널 스위치를 통해 비트를 찔러 특정 디스크 세그먼트를 메모리에로드 한 다음 실행합니다. 말할 것도없이 부트 스트랩 로더는 일반적으로 매우 작습니다.
"부트 스트랩 핑"은 자체를 사용하여 시스템을 구축하는 용어로도 사용됩니다.보다 정확하게는 이전 버전입니다. 예를 들어, ANTLR 버전 3은 ANTLR 버전 2에서 개발 된 파서를 사용하여 작성되었습니다.
부트 스트랩의 예는 일부 웹 프레임 워크에 있습니다. index.php (부트 스트 래퍼)를 호출하면 프레임 워크 도우미, 모델, 구성을로드 한 다음 컨트롤러를로드하고 제어권을 넘깁니다.
보시다시피 큰 프로세스를 시작하는 간단한 파일입니다.
부트 스트랩 에 대한 Wikipedia 기사를 참조하십시오 .
컴퓨팅 에서 의미하는 바를 설명하는 섹션과 링크가 있습니다 . 현장에서 네 가지 용도로 사용됩니다.
여기에 몇 가지 인용문이 있지만 더 자세한 설명과 대체 의미는 위의 링크를 참조하십시오.
"... 간단한 컴퓨터 프로그램이보다 복잡한 프로그램 시스템을 활성화하는 기술입니다."
"부트 스트랩이라는 용어의 다른 용도는 새 언어로 작성된 새 컴파일러의 더 많은 프로그램을 컴파일하기 위해 기존 언어로 새 프로그래밍 언어의 컴파일러의 작은 부분을 먼저 작성하여 컴파일러를 사용하여 자체 컴파일하는 것입니다."
"부트 스트랩 핑"이라는 용어는 일반적으로 시스템이 자체적으로 시작하는 데 의존하는 상황, 일종의 닭고기 및 달걀 문제에 적용됩니다.
예를 들면 :
- C로 작성된 C 컴파일러를 어떻게 컴파일합니까?
- OS가 아직 실행되지 않은 경우 OS 초기화 프로세스를 어떻게 시작합니까?
- 클라이언트가 현재 알려진 피어에 의존하여 시스템의 새 피어에 대해 알아내는 분산 (피어 투 피어) 시스템을 시작하는 방법은 무엇입니까?
이 경우 부트 스트랩은 일반적으로 외부 엔티티의 도움으로 순환 종속성을 끊는 방법을 나타냅니다.
- 다른 C 컴파일러를 사용하여 자체 컴파일러를 컴파일 (부트 스트랩) 한 다음이를 사용하여 자체적으로 다시 컴파일 할 수 있습니다.
- OS에서 제공하는 기능에 의존하지 않고 초기 프로세스를 설정하는 별도의 코드를 사용합니다.
- 하드 코딩 된 초기 피어 목록 또는 피어 목록을 제공하는 하드 코딩 된 추적기 URL을 사용합니다.
기타
응용 프로그램 개발의 맥락에서 "부트 스트랩"은 일반적으로 모듈 식 및 / 또는 자동 업데이트 가능한 소프트웨어에 대해 이야기 할 때 나타납니다.
사용자가 필요하지 않은 기능을 포함하여 전체 앱을 다운로드하고 업데이트가있을 때마다 다시 다운로드하고 수동으로 업데이트하는 대신 사용자는 작은 "부트 스트랩"실행 파일 만 다운로드하고 시작하여 차례로 다운로드하고 설치합니다. 사용자가 필요로하는 응용 프로그램의 일부입니다. 또한 부트 스트랩 구성 요소는 업데이트를 찾고 시작할 때마다 설치할 수 있습니다.
완전성을 위해 리샘플링 / 시뮬레이션을 사용하여 표본에서 모집단 속성을 추론하는 통계에서 다소 중요하고 비교적 새로운 방법이기도합니다. 부트 스트래핑 (통계)에 대한 자체 Wikipedia 기사가 있습니다.
Alex, 컴퓨터가 부팅 될 때하는 일과 거의 같습니다. (컴퓨터의 '부팅'은 실제로 부트 스트랩이라는 단어에서 유래되었습니다.)
처음에는 BIOS의 작은 프로그램이 실행됩니다. 여기에는 더 크고 복잡한 프로그램을로드하고 실행하기에 충분한 기계 코드가 포함되어 있습니다.
두 번째 프로그램은 아마도 NTLDR (윈도우에서) 또는 LILO (리눅스에서)와 비슷할 것입니다. 그런 다음 나머지 운영 체제를 실행하고로드 한 다음 실행할 수 있습니다.
사전 의미의 부트 스트랩은 최소한의 리소스로 시작하는 것입니다. OS의 맥락에서 OS는 POST (Power On Self Test)가 CPU를 깨워도 안전하다고 판단되면 신속하게로드 할 수 있어야합니다. 부트 스트랩 코드는 BIOS에서 실행됩니다. BIOS는 작은 크기의 ROM입니다. 일반적으로 운영 체제를 RAM에로드하는 명령 세트에 대한 점프 명령입니다. 점프의 대상은 하드 디스크의 부트 섹터입니다. BIOS 프로그램이 확인하면 저장된 OS의 시작 주소, 즉 유효한 MBR (마스터 부트 레코드)인지 여부를 포함하는 유효한 부트 섹터입니다. 유효한 MBR이면 OS가 메모리 (RAM)에 복사되어 OS에서 메모리 및 프로세스 관리를 처리합니다.
IMHO 첫 번째 컴파일러가 어떻게 작성되었는지에 대한 사실보다 더 나은 설명은 없습니다 .
요즘 운영 체제 로딩은 부트 스트랩이라고하는 가장 일반적인 프로세스입니다.
부트 스트랩 핑은 소프트웨어 개발에서의 사용 (여기에서 대부분의 답변, 예를 들어 kdgregory )과 Dirk Eddelbuettel이 논의한 통계 에서의 사용 이외에도 개발자에게 유용 할 수있는 강화 학습 의 맥락에서 또 다른 의미 를 가지고 있습니다 .
에서 서튼과 바토 :
Widrow, Gupta, and Maitra (1973) modified the Least-Mean-Square (LMS) algorithm of Widrow and Hoff (1960) to produce a reinforcement learning rule that could learn from success and failure signals instead of from training examples. They called this form of learning “selective bootstrap adaptation” and described it as “learning with a critic” instead of “learning with a teacher.” They analyzed this rule and showed how it could learn to play blackjack. This was an isolated foray into reinforcement learning by Widrow, whose contributions to supervised learning were much more influential.
The book describes various reinforcement algorithms where the target value is based on a previous approximation as bootstrap methods:
Finally, we note one last special property of DP [Dynamic Programming] methods. All of them update estimates of the values of states based on estimates of the values of successor states. That is, they update estimates on the basis of other estimates. We call this general idea bootstrapping. Many reinforcement learning methods perform bootstrapping, even those that do not require, as DP requires, a complete and accurate model of the environment.
Note that this differs from bootstrap aggregating and intelligence explosion that is mentioned on the wikipedia page on bootstrapping.
In terms of it in regards to using the popular Twitter Bootstrap I feel like this type of bootstrapping is the action of integrating a modular component into a Web application without the Web application having to even acknowledge the modular component exists until it needs it or references it.
The developer can seamlessly integrate a default copy of the CSS Twitter Bootstrap theme by simply loading (referencing) it into the Web application. Vuola! Then you may need to override some of these changes, but you can do so in such a way that the resource/component is untouched and completely reusable.
This same concept is how Web Devs implement jQuery APIs and so on, but it's not really expressed by Devs as bootstrapping per se. What it does is it improves flexibility and reusability while allowing the isolation of different components/resources of an app to reside freely either on the same server/s or possibly on a CDN.
NOTE: In computing bootstrapping deals with the MBR and in UNIX it requires a special bootloader or manager which is a small program in ROM that loads the OS into RAM. If you think about it the same concept takes places in the action of the bootstrap loader checking the MBR and loading the OS based on this table which occurs without the OS having any idea that this takes place.
I belong to the generation who flipped switches to enter a boot program. In the early 1980s, I worked on a microcomputer called Micro-78, developed by Electronics Corporation of India Ltd (ECIL). It was a sort of clone of Altair 8800. I distinctly remember what happens when a small boot program was entered using the toggle switches and executed by pressing a button. The program reads a second boot program contained in the 1st track of the floppy disk and overwrites it on itself in such a way that the second boot program starts executing to load a disk operating system. I think the term "bootstrap" refers to this process of the first boot program reading and overwriting the second boot program on itself, in a way "pulling itself up" with the additional functionality of the second boot program. That may be the origin of the original meaning of "the bootstrap program".
As a humble beginner in the world of programming, and flicking through all the answers here after seeing this word used a lot in apparently slightly different ways in different places, I found reading the Wikipedia page on Bootstrapping (duh! I didn't think of it either at first) is very informative to understand differences in use of this word. Could it be......on extremely rare occasions......Wikipedia might even have better explanations of certain terms than....(redacted)? Will they bring in rep points on Wikipedia though?
To me, it seems all the meanings something to do with: start with something as simple as possible Thing1, make something slightly more complex with that Thing2, and now you can use Thing2 to do some kind of tasks more efficiently and quickly than you could originally with Thing1. Then repeat from Thing2 to Thing 3 ad infinitum...
I see it as closely connected to both biological evolution and 'Layers of Abstraction' (newbies like me see, ahem, Wikipedia, cough) - the evolution from 1940's computers with switches, machine code, Assembly, C, Python, AIs you can give all kinds of complex instructions to like "make the %4^% dinner to my default &^$% requirements and clean the floor you %$£"@:~" in drunken slang English or Amazon tribal dialect without them 'raising an exception' (for newbies again...you guessed it) - missed out lot of links there due to simple ignorance.
Then in certain specific software meanings: Meaning1: Thing1 is used to load latest version of Thing2 (because of course Thing2 will be bigger than Thing1, just as Thing3 will be be bigger than Thing2).
Meaning2: Thing1 is a lower level language (closer to 1001011100....011001 than print("Hello, ", user.name)) used to write a little bit of the higher language of Thing2, then this little bit of Thing2 is used to expand Thing2 itself from baby vocabulary level towards adult vocabulary level (Thing2 starts to be processed, or to use correct technical term 'compiled', by the baby version of itself (it's a clever baby!), whereas the baby version of Thing2 itself could of course only be compiled by Thing1, cause it can't exist before it exists, right duh!), then child version of Thing2 compiles Surly Teenager version of Thing2, at which point programming community decides whether Surly Teenager's 'issues' (software term and metaphor term!) are worth spending enough time resolving to be accepted long term, or to abandon them to (not sure where to take the analogy here).
If yes, then Thing2 has 'Bootstrapped' itself (possibly a few times) from babyhood to adulthood: "the child is the father of the man" (Wordsworth, suggest don't try looking up the quote or the author on Stack Overflow).
참고URL : https://stackoverflow.com/questions/1254542/what-is-bootstrapping
'Program Tip' 카테고리의 다른 글
MySQL 데이터베이스 / 테이블 / 열이 어떤 문자 집합인지 어떻게 알 수 있습니까? (0) | 2020.10.02 |
---|---|
이론적으로 사이클 당 최대 4 개의 FLOP을 달성하려면 어떻게해야합니까? (0) | 2020.10.02 |
C # 인터페이스. (0) | 2020.10.02 |
수정 된 커밋을 원격 Git 저장소에 푸시하려면 어떻게해야합니까? (0) | 2020.10.02 |
Swift 기반 애플리케이션은 OS X 10.9 / iOS 7 이하에서 작동합니까? (0) | 2020.10.02 |