이번 포스팅에서는 2진수의 특성과 비트연산을 활용해서 할수 있는 여러가지 프로그래밍적인 기법을 알아보겠다.성능을 위해서 실제로 우리가 작성한 코드를 컴파일러 수준에서 앞으로 배울 연산들로 바꿔주는 경우도 있다. 이렇게 2진수를 활용한 여러가지 꼼수(?)들을 사용해서 컴
이번에는 운영체제의 메모리 관리의 핵심인 가상메모리에 대해서 알아보겠다.다음과 같은 상황을 상상해보자8GB 메모리에 실행파일 하나의 크기가 1GB인 파일이 20개가 실행중1GB크기의 프로세스가 20개면 20GB인데 어떻게 8GB메모리에서 실행가능할까?운영체제에서는 8G
세마포어와 뮤텍스를 통해서 임계구역에 대해 상호배제를 통한 동기화를 알아보았다. 두개의 동기화 방법의 단점이라면 임계구역으로 들어가기전 wait(), 임계구역을 빠져나올때 signal 혹은 release를 해주는 등의 코드를 프로그래머가 직접 넣어주어야 하는것이다. 프
뮤텍스를 통한 프로세스 동기화에서 멀티코어 cpu인 경우 스핀락을 통해서 문맥교환 없이 스레드들은 뮤텍스 락을 얻기 위해 경합하고 임계구역에 접근하는 방법을 알아보았다. 하지만 cpu를 획득 하기 위해서 끊임없이 반복문을 실행하고 있는 바쁜대기(busy waiting
피터슨의 해결안은 이론적으로는 프로세스 동기화를 위한 3가지 조건을 만족하지만 연산의 하드웨어 구현상의 문제로 인해서 스레드들이 임계구역으로 접근하기 위한 권한을 얻는 과정에서 경합상황이 발생하게 되었다.이런 구현상의 한계는 운영체제를 디자인 할 때 부터 "임계구역으로
프로세스의 동기화 이슈는 프로그래밍을 하면서 만나는 중요한 이슈다. 운영체제가 사용하는 프로세스 번호를 관리하는 전역변수 next_available_pid가 있다. 프로그램 실행 도중 프로세스A와 프로세스B가 생성되었다.두 프로세스는 우연히 비슷한 시기에 프로세스를 생
동적프록시 적용 포스팅에서 config를 따로 만들어서 타겟에 동적프록시가 적용되도록하고 연관된 빈을 일일이 연결해줬다. 이렇게 동적 프록시를 적용하면 컨테이너의 컴포넌트 스캔 대상에 들어갈 수 없기 때문에 불편한 점이 있었다. 컴포넌트 스캔을 도중 빈이 컨테이너에 등
문제 인터페이스를 사용한 프록시 패턴을 사용하면서 프록시를 적용하고자 하는 클래스 개수 n개 만큼 로깅 코드를 계속 생성해야하는 문제가 있었다. 프록시를 적용하고자 하는 클래스마다 인터페이스와 프록시 구체클래스를 만들어줘야 했기 때문이다. 이 문제를 해결하기 위해 JD
전략패턴을 통해서 로깅을 적용해서 비지니스 로직을 담당하는 클래스와 로깅(부가기능)을 담당하는 클래스를 분리할 수 있었지만 여전히 메인 기능에 해당하는 코드를 변경해야 하는 단점이 있었다. 이 문제를 해결하기 위해서 프록시 패턴을 사용해서 메인 기능의 수정 없이 요청
이전 포스팅에서 템플릿 메서드 패턴을 통해서 비지니스로직과 부가기능인 로깅을 분리했었다. 하지만 상속을 사용해서 결합도가 증가하고, 추상 내포클래스를 사용해서 가독성이 떨어지는 등의 문제가 있었다.이런 문제들을 해결하기 위해 콜백을 사용한 전략패턴을 통해서 로깅부분을
WAS서버에 요청이 들어왔다가 http response로 나가기까지 몇분이 걸리는지 측정해야하는 상황을 가정해보자.이런식으로 표시할 수 있다.단점이 있다면, 모든 기능의 비지니스 로직 전과 후에 시간을 찍어주는 기능을 넣어야 한다. 결국 이런식의 설계는 유지보수를 힘들
문자열 출력 함수에서 어떻게 매개변수로 넣은 정수형을 곧바로 문자열로 포매팅해서 출력할까?문자열 출력함수와 가변 매개변수에 대해서는 다른 포스팅에서 알아보도록 하고, 이번에는 어떻게 정수형의 데이터를 문자열로 출력하는지에 대해서 알아보겠다.우선 매개변수로 들어온 정수가
함수포인터의 작동원리를 이해하기 위해서는 컴파일의 과정을 먼저 이해해야 한다.clang 컴파일러는 4가지 단계를 거쳐 소스코드를 실행파일로 만든다. "컴파일"은 넓은 의미에서 이 과정을 포괄하는 말이다. 하지만 좁은 의미의 컴파일은 전처리 다음단계인 translatio
This is my personal experience when I code a small game with C. What I thought for size_t is a simple and ideal type to break negative loop as it can
This posting is about the better way to solve the algorithmn problem in Leetcode there is a set of string as input > input : abcdabc and output wou
node js 는 어떻게 메모리 관리를 하는지 알아보자V8엔진은 Javascript를 크롬브라우저에서 돌려주는 엔진이다. V8엔진은 Javascript를 assembly code로 컴파일해준다. node js는 V8엔진을 C++로 wrapping(?)해서 Operati
정적 매서드와 클래스 매서드의 차이점에 대해서 알아보자. 우선 리눅스에서 어플리케이션이 빌드되고 프로세스가 어떻게 생겼는지 알아보자. 리눅스에서 하나의 프로세스는 4개의 영역을가진다 > DATA HEAP STACK TEXT DATA 빌드가 되고나면 가장 먼저 ST
node.js 프로젝트를 배포하면서 도커를 사용해서 node.js 서버를 빌드하기로 했다. 도커이미지 파일을 작성하던 중, 데이터베이스 연결이 되지 않은 상태서 서버를 listen하는 명령어를 실행하니 일정 간격으로 데이터베이스 매니저가 connection요청을 계속
Posting about web socket and real time networkingForwarding request in certain interval to server and get the data. We are not sure when the request a
Currently I am studying on Operting System and came to understand how commands work in Linux terminal. Before we go, let us check out how Linux recei