개발자 면접 공부/운영체제,CS 27

UTF-8 vs UTF-16

오늘은 UTF-8 과 UTF-16의 차이점을 공부해보겠습니다. 먼저 UTF의 개념을 이해하기 전에 유니코드의 개념을 이해해야 합니다. 유니코드 유니코드는 다국어를 지원하는 프로그래밍을 하다보면 가장 먼저 접하는 어려움입니다. 컴퓨터의 언어는 0과 1로만 이루어 져있는데 세상에는 무수한 언어가 존재합니다. 컴퓨터 내에서 무수한 언어를 표현하기 위해 나타난 기법입니다. 일단 유니코드라는 용어의 개념은 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드입니다. 예를들어 ASCII Code로 0x41 = A로 매핑된 것 처럼, 아스키코드로 표현할 수 없는 문자들을 유니코드라는 이름 아래 전세계의 모든 문자를 특정 숫자(키)와 1:1로 매핑한 것 입니다. UTF란? UTF는 유니코드 문자를 인코딩 하는 방식..

컴파일 과정

오늘은 컴파일의 과정을 알아보도록 하겠습니다. 개요 프로그래밍을 하다보면 컴파일이라는 단어를 많이 들어봤을겁니다. 소스 코드를 빌드(Build) 혹은 컴파일(Compile)해서 실행해봤거나 코드를 잘못 작성하여 컴파일 에러가 났던 경험이 있을 겁니다. 정확하게 컴파일이 어떠한 일을 하는지 모르고 막연하게 "컴파일을 하면 소스 코드의 문법을 검사하고 실행하나 보다" 라는 생각이 들었으면 이참에 자세히 알아보도록 하겠습니다. 정의 컴파일은 인간이 이해할 수 있는 언어로 작성된 소스 코드(고급 언어 : C,C++,JAVA 등) 을 CPU가 이해할 수 있는 언어(저급 언어 : 기계어) 로 변환 하는 작업을 말합니다. 우리가 소스코드를 작성할때는 인간이 이해할수있는 영어로 작성을 하지만 컴퓨터는 이것을 이해를 절..

리틀 엔디안 vs 빅 엔디안

오늘은 리틀 엔디안 vs 빅 엔디안 에 대해서 공부하도록 하겠습니다. 엔디안 이란? 엔디안 은 컴퓨터 메모리와 같이은 1차원의 공간에서 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order) 라고 한다. 엔디안은 보통 큰 값이 앞에 나오는 빅-엔디안과 작은 값이 앞에 나오는 리틀-엔디안으로 나눌수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들-엔디안이라 부릅니다. 빅-엔디안은 최상위 바이트부터 차례대로 저장하는 방식 리틀-엔디안은 최하위 바이트부터 차례대로 저장하는 방식 그럼 최상위 최하위란 무엇인가? 여기서 빅-엔디안은 사람이 숫자를 세는것처럼 큰 단위에 바이트가 앞에 오는 방식이고 리틀-엔디안은 그 반대로 작은 단위가 앞으..

쓰레드 풀링, 메모리 풀링

오늘은 쓰레드 풀링에 대해 공부하도록 하겠습니다. 쓰레드 풀링 풀이란 연못이라는 뜻 입니다. 저희가 익히 알고있는 게임 스타크래프트 에서도 스포닝 풀 이라는 건물이 있습니다. 이것을 번역하면 산란못으로 풀 = 못 -> 연못 이라는 뜻이 있고 실제로 건물 자체가 초록색 연못이 가운데 있습니다. 그럼 왜 쓰레드 풀링을 사용하는지 이유를 알아봅시다. 쓰레드 풀에 대한 이해 쓰레드의 생성과 소멸은 시스템에 많은 부담 때문에 빈번한 쓰레드의 생성과 소멸은 피해야 성능이 향상됨 따라서 쓰레드 풀을 유지하는 것은 성능 향상에 도움이 됨 쓰레드의 재활용 기법 ( 할당된 일을 마친 쓰레드를 소멸시키지 않음, 쓰레드 풀이라는 큐에 저장시켜놓고 다시 꺼내 쓰는 개념) 즉, 쓰레드의 생성과 소멸에 필요한 비용을 지불하지 않겠..

블로킹(Blocking), 논 블로킹(Non-Blocking), 동기(Sync), 비동기(ASync)

오늘은 블로킹, 논 블로킹 추가로 동기, 비동기에 대해 알아보겠습니다. 동기&비동기 vs 블로킹&논블록킹 개념 차이 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹, 비동기와 논블록킹의 작동 매커니즘이 더 직관적이기 때문에 많은 사람들이 이 개념들을 같은것 혹은 비슷한 것으로 오해하고 있다. 이 두가지 개념은 서로 전혀 다른 곳에 초점을 맞춘 개념들이므로 서로 직접적인 관련은 거의 없다고 봐도 된다. 단지 조합하여 사용되는 것 뿐이다. 다음의 두 용어를 짚고 넘어야 한다. -제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후, 자신을 호..

Stack OverFlow란?

오늘은 Stack OverFlow를 공부해보겠습니다. Stack OverFlow Stack OverFlow는 Stack 영역의 메모리가 지정된 범위를 넘어갈 떄 발생한다. Stack 메모리는 보통 지역 변수가 저장되는 영역이다. 함수에서 지역 변수를 선언하면 지역 변수는 Stack 메모리에 할당되고 함수를 빠져나오면 Stack메모리에서 해제된다. 하나의 프로그램이 실행될 때 수많은 함수를 호출하고 빠져 나오게 되는데 그 떄마다 함수에서 사용하는 지역 변수는 Stack 영역에 할당되고 해제되는 것을 반복하게 되며 그에 따라 사용하는 Stack 영역도 변하게 된다. 만약 한 함수에서 너무 큰 지역 변수를 선언 또는 함수를 무한 재귀호출을 할 경우 Stack OverFlow가 발생할수 있다. Stack Ove..

CS,OS 단편화

오늘은 단편화에 대해 공부하겠습니다. 메모리 단편화 메모리에서 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 보고 메모리 단편화 라고 말합니다. 이 메모리 단편화는 내부, 외부 단편화 가 있습니다. 1. 내부 단편화 - 프로그램의 크기보다 분할의 크기가 큰 경우, 해당 분할에 프로그램을 적재하고 남는 메모리 공간 - 즉, 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각 - 메모리 자유 분할 공간이 10,000B가 있고 프로세스 A가 9,999B를 사용하게 되면 1B가 남게 된다. 이러한 현상을 내부 단편화라고 한다. 2. 외부 단편화 -프로그램의 크기보다 분할의 크기가 작은 경우, 해당 분할이 비어있음에도 불구하고 프로그램을 적재하지 ..

페이징과 세그먼테이션

오늘은 페이징과 세그먼테이션에 대해 알아봅시다. 먼저 알아보기 전에 왜 이러한 기법이 나왔을가요? - 다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 작업이 필요하기 떄문! 메모리 관리 기법 1. 연속 메모리 관리 - 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당이 되야함 - 고정 분할 기법 : 주기억장치가 고정된 파티션으로 분할(내 외부 단편화 발생) - 동적 분할 기법 : 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재(외부 단편화 발생) 2. 불연속 메모리 관리 - 프로그램 일부가 서로 다른 주소 공간에 할당될 수 있는 기법 - 페이지 : 고정 사이즈의 작은 프로세스 조각 - 프레임 : 페이지 크기와 같은 주기억장치 메모리 조각 - 단..

PCB, Context Switching

오늘은 PCB랑 Context Switching 에 대해 공부해보겠습니다. Process Metadata - CPU들은 각 프로세스들이 누군지 알아야 관리가 가능합니다. 프로세스들의 특징을 갖고있는 것이 Process Metadata입니다. Process ID Process State Process Priority CPU Registers Owner CPU Usage Memeory Usage 이러한 메타데이터는 프로세스가 생성되면 PCB에 저장됩니다. PCB(Process Control Block) - 프로세스 메타데이터들을 저장해 놓는 곳, 한 PCB 안에는 한 프로세스의 정보가 담김 프로그램 실행 -> 프로세스 생성 -> 프로세스 주소 공간에 (코드, 데이터, 스택) 생성 -> 이 프로세스의 메타데이..

교착 상태(DeadLock)

오늘은 교착 상태 (DeadLock)에 대해 공부해봅시다. 교착 상태(DeadLock)이란? 한정된 자원을 여러 곳에서 사용하려고 할 떄, 발생하는 문제입니다. 프로세스가 자원을 얻지 못하고 다음 처리를 하지 못하는 상태입니다. 프로세스 1과 프로세스2가 모두 자원 1, 자원 2를 얻어야 한다고 가정해보자. t1 : 프로세스 1이 자원 1을 얻음 / 프로세스 2가 자원 2를 얻음 t2 : 프로세스 1은 자원 2를 기다림 / 프로세스 2는 자원 1을 기다림 이처럼 현재 서로 원하는 자원이 상대방에게 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠지게 된다. -> 이러한 상황을 DeadLock 이라고 부른다. [주로 발생하는 경우] 1. 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하..