솔직히 운영체제를 배울 때 가장 와닿지 않는 부분이었다.도대체 인터럽트가 언제 일어난다는거야? 본적도 없는데.난 시스템 콜 발생시켜본적도 없는데?우선 기본 개념을 작년에 들었던 운영체제 수업 필기를 참고해서 다시 정리해보았다.유저모드, 커널모드User mode제한된 명령어만 사용 가능.하드웨어 디바이스 접근 불가.OS가 아닌 나머지 프로그램은 유저모드에서 돌아간다. Kernel modeCPU에서 제공하는 모든 instruction 수행 가능.디바이스 레지스터를 포함한 모든 하드웨어 디바이스에 접근 가능.OS는 커널모드에서 돌아간다. → 이를 결정하는 것은 CPU이다. 인터럽트 (Interrupt)Interrupt (하드웨어 Interruption)시스템에서 발생한 다양한 종류의 이벤트 or 이벤트를 알..
네트워크를 처음 배우다 보면 인터넷이 무엇이고, 어떻게 동작하는지 알게 된다.그리고 다 잊었다. 개발하는 데 필요 없다는 핑계를 대면서... 그러나 2024년 어느 날 트위치가 망 사용료 때문에 한국 사업을 철수했다는 사실을 침착맨 덕분에 알게 되었고, 이게 인터넷의 원리와 연결되어 있다는 사실은 최근에 와서야 알게 되었다. 네트워크란?여러 기기들이 데이터를 주고 받기 위해 유선 또는 무선으로 연결된 통신 체계LAN (Local Area Network)집과 같이 제한된 범위 내의 네트워크이더넷(Ethernet) - 유선통신와이파이(wireless LAN) - 무선통신WAN (Wide Area Network)여러 LAN이나 다른 종류의 네트워크들을 하나로 묶어서 멀리 떨어진 기기들도 통신이 가능하도록 만든..
2024. 01. 30 > 2025. 06. 30 블로그 A/S 프로젝트🚧 로 추가한 글입니다.설명을 추가하고, 오개념을 바로잡습니다.렉시컬 환경의 구성요소1. 환경 레코드(Environment Record)모든 지역 변수를 프로퍼티로 저장하고 있는 객체this 값과 같은 기타 정보도 여기에 저장1.1 객체 환경 레코드 (Object Environment Record)BindingObject 를 참조하고 있으며, 이 객체는 전역 객체를 참조한다.💡 전역 객체의 프로퍼티- var로 선언한 전역 변수- 내장 전역 객체들의 바인딩- 전역 스코프에서의 함수 선언문, 비동기 함수, 제너레이터, 비동기 제너레이터ObjectEnvironmentRecord = { [[BindingObject]]: 전역 객체 참조}..
2024. 01. 26 > 2025. 06. 23 블로그 A/S 프로젝트🚧 로 추가한 글입니다.예시를 다듬고, 오개념을 바로잡습니다. 실행 컨텍스트(execution context)란?어떤 소스코드가 실행되는 단위.함수에 있는 정보, 즉 렉시컬 환경(환경 레코드와 외부 렉시컬 환경에 대한 참조)을 참조!** 환경 레코드 - 식별자와 바인딩된 값이 실행 컨텍스트를 콜스택에 쌓아올린 후 실행하여 코드의 환경과 순서를 보장할 수 있게 된다.실행 컨텍스트는 언제 생성될까?하나의 실행 컨텍스트를 구성할 수 있는 소스코드의 종류는 다음과 같다. 이때 내부 코드는 포함하지 않는다. 그리고 평가 시점에 각각의 컨텍스트가 생성된다.전역함수eval() 함수모듈실행 컨텍스트와 콜스택, 렉시컬 환경var x = 1;cons..
리액트 개발자라면 누구나 한번쯤은 겪었을...StrictMode 때문에 useEffect가 두 번 호출되는 문제! 그냥 삭제하면 안되는걸까? StrictMode 공식문서공식문서를 보면서 정확히 어떤 일을 하는지 다시 알아보자. 1. 이중 렌더링리액트는 작성하는 모든 컴포넌트가 순수 함수라고 가정한다. 즉 컴포넌트를 두번씩 실행시켜서 같은 결과를 생성하는지 확인하는 것! 2. Effect 두 번 실행원래 useEffect의 셋업은 컴포넌트가 마운트 될 때 실행, 클린업은 언마운트될 때 실행된다. 그리고 의존성 배열에 있는 값이 변경되면 둘 다 다시 실행된다. 엄격모드에서는 이런 셋업+클린업 사이클을 한번 더 한다. 3. ref 콜백 두 번 실행ref콜백이 뭐지... ref는 그냥 객체 넘겨주는거 아님? ..
2025. 03. 07 블로그 A/S 프로젝트🚧 로 추가한 글입니다.기존에는 "웹 브라우저" 로 퉁쳤던 대상을, 정확히 누가 수행하는지 자세히 알아봅시다. 주소창에 URI를 입력하면 어떤 일이 생길까?주소창에 URI를 입력하면 다음과 같은 일이 진행된다. 1. handling inputs: 텍스트를 입력했네. 쿼리야 URL이야?누가: 브라우저 프로세스의 UI 쓰레드가무엇을: 주소창에 입력한 텍스트를어떻게Search Query인지, URL인지 판단Search Query - 검색엔진으로 쿼리 보내서 검색 준비URL - 네트워크 쓰레드로 URL 값 보낼 준비 2. Start Navigation: enter 눌렀네. 요청 보내자!2-1. UI 쓰레드누가: 브라우저 프로세스의 UI 쓰레드가무엇을: 주소창에 입력..
2025. 03. 07 블로그 A/S 프로젝트🚧 로 추가한 글입니다.프로세스, 쓰레드 ... 이론으로는 많이 들어봤고, 정리까지 했었다.그렇지만 이걸 내가 왜 알아야할까.. 라는 불평을 하곤 했다. 운영체제는 정말 프론트엔드와 관련이 없을까? (1) 용어정리프로세스프로그램을 구동해, 프로그램의 상태가 메모리상에서 실행되는 작업 단위하나의 프로그램에는 하나의 프로세스 할당스레드하나의 프로그램에서 여러 개의 작업을 수행하기 위한 더 작은 실행 단위하나의 프로세스에는 여러 개의 스레드스레드끼리는 메모리 공유 크롬 브라우저를 애용하지만 크롬 브라우저 아키텍처는 모름매일 크롬 브라우저로 개발하지만 아키텍처에 대해서는 모르고 있었다... 이렇게 여러 프로세스를 가지고 있는데, 특히 Renderer 프로세스와 Pl..
배경프리코스 미션을 구현하면서 클래스에서 다른 클래스의 인스턴스를 생성하고 사용하는 방법에 대해 고민하게 되었다. 우선 두 가지 방법으로 구현하게 되었는데, 둘 다 찝찝한 구석이 있어 좋은 방법이 없는지 궁금해졌다.생성자에서는 초기화만 하고, init 메서드에서 값을 넣어준다. (Calculator) → 이거 init 으로 계속 초기화되는데 사용할 일이 있나?클래스 내부에서 그냥 생성한다. (RacingGame) → run 실행될때마다 계속 인스턴스 만드는건데 비효율적인듯. 그런데 생성자에서는 아직 입력값을 받기 전이라 인스턴스를 만들 수 없다.class Calculator { customSeparator; numbers; constructor() { this.customSeparator = ..