컨텍스트(Context)
💡 **컨텍스트**
- ‘상황’, ‘맥락’, ‘문맥 상의 의미’ 등으로 이해되는 용어
- 컨텍스트는 그냥 Text 처럼 바로 이해되는 단순한 원본 정도가 아니라, 문맥 및 상황에 따라 어떤 해석이 가미되어 이해되는 한 차원 높은 공간, 영역을 의미한다.
하드웨어 및 운영체제 관점에서의 컨텍스트
💡 **하드웨어 및 운영체제 관점**
- 프로세서 안에 있는 레지스터, 플래그 등의 현재 값(상태)들의 집합
- Context Switching(문맥 교환)
- 멀티태스킹 작업을 수행하기 위해
- 시분할 처리에서 수행중인 각 태스크들을 순서있게, 반복적으로 교체하기 위해
- 태스크 상태 정보를 레지스터들에 저장 또는 이전 상태를 불러오기 위한 작업
- 태스크 상태 정보? CPU 및 메모리 상태 정보 → CPU 레지스터 및 메모리 스택
- 작업이 중단되고 나중에 같은 지점에서 계속 될 수 있도록 저장하는 최소 데이터 집합
- 하드웨어(CPU)와 소프트웨어(운영체제) 간에 협동으로 이루어지는 스레드 실행 상태의 저장과 복원 작업
- 실제 프로그램을 수행하는 작업은 아니다.
소프트웨어 관점에서의 컨텍스트
💡 **소프트웨어 관점**
- 그때그때 상황에 맞게끔 실행, 판단, 결정 등을 해야하는 부분
- context menu(컨텍스트 메뉴)
- 그 메뉴를 호출한 동작 및 상황에 따라 다른 선택 사항들이 나열되는 메뉴
- 예시
- 할당 연산자(=) 다음에는 표현식 컨텍스트가 온다.
- if 조건문 다음에 { 가 오면 문장 컨텍스트가 온다.
자바스크립트 실행 컨텍스트
💡 **자바스크립트 실행 컨텍스트**
- 실행에 필요한 다양한 정보들을 형상화하고, 이들을 목록화해서 관리하기 위한 추상적인 개념
- 실행에 필요한 정보들?
- 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
- 변수의 유효 범위(Scope), 유효 기간(Lifetime)
- 함수 선언 정보
- this가 가리키는 것 등…
- 실행에 필요한 정보들?
💡 **실행 컨텍스트의 관리 및 보유 형태**
- 관리 형태
- 실행에 필요한 여러 정보들을 객체 형태로 담아 스택으로 관리
- 보유 형태
- 렉시컬 환경 (환경 레코드 + 외부 렉시컬 환경에 대한 참조)
- 렉시컬 환경? 코드가 작성된 위치에 따라 변수 및 함수의 범위를 정의하는 환경
- 렉시컬 환경 (환경 레코드 + 외부 렉시컬 환경에 대한 참조)
💡 **실행 컨텍스트를 만들어내는 과정**
- 자바스크립트 엔진이 실행 가능한 코드를 만나면 그 코드를 평가해서 실행 컨텍스트를 만들어낸다.
- 실행 가능한 코드?
- 전역 코드
- 함수 코드 등…
- 실행 가능한 코드?
- 과정
가장 안쪽의 inner() 함수가 가장 빠르게 끝난다 -
1. 함수 호출
2. 실행중인 코드 작업 잠시 멈춤
3. 함수 코드 평가하면서 실행 컨텍스트 영역 생성
4. 생성된 실행 컨텍스트는 실행 컨텍스트 스택에 푸시
5. 실행 흐름이 실행 컨텍스트 스택 상의 실행 컨텍스트로 이동
6. 함수 안팎의 환경을 찾아내 실행
7. 함수 실행이 종료되면 실행 컨텍스트 스택에서 pop되어 제거
'💾 CS' 카테고리의 다른 글
네트워크 토폴로지의 종류와 필요성 (0) | 2024.04.16 |
---|---|
네트워크: 노드와 링크, 대역폭, 처리량, 트래픽, RTT (0) | 2024.04.16 |
라이브러리(Library)와 프레임워크(Framework)의 차이 (0) | 2024.04.01 |
CI/CD (Continuous Integration/Delivery & Deployment) (0) | 2024.03.21 |
컨테이너(container)와 도커(docker) (0) | 2024.03.20 |