요약 스레드 전용 리소스 스레드에 속한 스택 영역과 프로그램 카운터, 스택 포인터, 함수 실행 시 사용되는 레지스터 정보가 모두 해당 스레드 전용임. 이 모든 정보를 스레드 상황 정보 라고 함. 스레드는 프로세스 주소 공간에서 스택 영역을 제외한 나머지 영역을 모두 공유함 코드 영역 : 모든 함수를 스레드에 배치하여 실행할 수 있다. 스레드 간에 공유되므로 어떤 함수든지 모두 스레드에 적재하여 실행할 수 있음. 특정 함수를 특정 스레드에서만 실행되도록 하는 것은 불가능 함. 데이터 영역 : 모든 스레드가 데이터 영역의 변수에 접근할 수 있음. 전역 변수가 저장되는 곳임. 프로그램이 실행되는 동안 데이터 영역 내에 전역 변수의 인스턴스는 하나만 있기에 모든 스레드는 이 전역 변수에 접근할 수 있음. 힙 영..
요약 모든 것은 CPU 에서 시작 됨. 메모리에서 명령어를 하나 가져옴 이 명령어를 실행한 후, 다시 메모리에서 명령어를 가져옴. 운영체제가 탄생하면서 프로그래머는 더 이상 실행 파일을 수동으로 적재하거나 프로그램을 수동으로 유지 관리할 필요가 없어짐. 운영 체제는 모든 것을 백그라운드에서 처리함. 프로세스 주소 공간은 아래에서 위의 방향을 기준으로 다음과 같음. 코드 영역 데이터 영역 힙 영역 스택 영역 스레드는 프로세스 주소 공간을 공유함. 스레드 풀은 스레드 여러 개를 미리 생성해 두고 스레드가 처리할 작업이 생기면 해당 스레드에 처리를 요청함. 미리 생성되어 있기에 스레드 생성 종료 작업이 빈번하게 발생하지 않음. 불필요한 메모리를 소비하지 않음.
요약 링커는 컴파일러가 생성한 대상 파일 여러 개를 하나로 묶어 하나의 최종 실행 파일을 생성함. 링크의 전체 과정 대상 파일이 참조하고 있는 **외부 심벌(external symbol)**에 대한 실제 구현이 어느 모듈이든지 단 하나만 있어야 하며, 링커는 이를 찾아내서 연결하는 작업을 하는데, 이를 **심벌 해석(symbol resolution)** 이라고 함. 대상 파일을 모아 하나로 합침. 대상 파일에서 다른 파일의 내용을 ‘참조’ 하고 싶지만, 아직 다른 파일의 내용이 작성되지 않은 경우, 임시로 그 값을 비워두었다가 그 파일의 작업이 마쳐지면 그때 쭉 다 바꿔준다. 이 과정을 **재배치(relocation)** 이라고 함. 링크 과정 (심벌 해석) 심벌은 전역 변수와 함수의 이름을 포함하는 모..
요약 프로그래밍 언어로 작성된 “소스 파일”을 컴파일러에게 먹여주면 컴파일러는 이것을 꼭꼭 씹고 뜯고 맛본 후, 실행 파일 형태로 뱉어냄. 실행 파일이 바로 CPU가 직접 실행할 수 있는 기계 명령어 임. 즉, 컴파일러는 “번역기” 이자 “텍스트 처리 프로그램” 이라고 생각할 수 있음. 컴파일러는 소스 파일의 각 항목을 잘게 쪼개어 토큰화 함. 소스 코드에서 토큰을 추출하는 과정을 어휘 분석(lexical analysis) 라고 함. 토큰을 가지고 그 의도를 표현해야만 함. 특정 토큰 키워드에 따라 컴파일러는 문법 오류를 보고할 수 있음. 이 과정을 해석(parsing) 이라고 함. 컴파일러는 해석을 통한 구조를 트리로 표현함. 구문 트리에서 이상이 있는지 확인함. 이 단계를 통과하면 컴파일 오류가 없다..
요약 (Section 1.1 여러분이 프로그래밍 언어를 발명한다면?) CPU는 단순하지만 빠르다. 프로그래머는 단순하지만 빠른 CPU를 다루기 위해 천공 카드로 컴퓨터 작업을 제어함. 하지만 이는 CPU 관점의 코드일 뿐 인간이 이해하기 어려움 어셈블리어를 통해 인간이 인식할 수 있는 ‘기계 명령어’ 를 이용하여 CPU를 제어하게됨. 하지만 여전히 어셈블리어는 저수준 언어임. 저수준 언어는 매우 추상화되어 있어 구체적으로 ‘우리가 원하는 동작’ 을 하려면 세부 사항들을 하나하나 다 알려줘야 함. 고급 프로그래밍 언어를 통해 CPU를 동작시키기 위한 ‘추상적인 표현’ 을 ‘구체적인 표현’으로 자동 변환할 수 있게 됨. 프로그래밍 언어를 통해 단순한 문장을 표현하기도 하지만, 이들이 중첩되어 복잡한 문장을 ..
수강 목적 지난 COMP1500 수업 이후 많은 것을 얻어갔다고 생각했기 때문에 POCU 아카데미의 로드맵을 쭉 따라가서 "전문 프로그래머가 되기 위한" 과정을 밟아가고 싶었다. 현재 총 7개의 로드맵이 열려있는데, 이제 2개의 로드맵이 끝났다. 소프트웨어 공학용 수학 수업의 설명에서 컴퓨터를 이해하는데 중요한 수학을 다루고, 특히 논리적 사고를 강조한다고 한다. 본인은 학창 시절 수학 수업을 매우 좋아했다. 오랜만에 수학 수업을 듣게되어서 설레기도 했고 다시 복습도 하고 이제는 프로그래머로서 알아야할 논리적 사고를 학습하고 수학 지식들을 정리하여 배울 수 있다는 점이 매력적으로 다가왔다. 물론 이제 3년차 개발자이기 때문에 왜 굳이? 직무에 필요한 기술들을 더 공부하는게 더 중요하지 않아? 라고 생각할..
17. 어려운 연습문제 17.21 막대 그래프의 부피 히스토그램(막대 그래프)을 상상해 보자. 누군가가 히스토그램 위에서 물을 부었을 때, 이 그래프가 저장할 수 있는 물의 양을 계산하는 알고리즘을 설계하라. 단, 막대의 폭은 1이라고 가정하자. 17.26 드문드문 유사도 서로 다른 단어로 구성된 두 문서의 유사도는 단어들의 교집합의 크기 나누기 합집합의 크기로 정의할 수 있다. 즉, 정수로 이루어진 두 문서 {1, 5, 3}과 {1, 7, 2, 3}의 유사도는 0.4가 된다. 왜냐하면 두 문서의 교집합의 크기는 2이고 합집합의 크기는 5이기 때문이다. 유사도의 밀도가 굉장히 ‘희박’할 것 같은 문서가 굉장히 많이 주어져 있다(각 문서는 ID로 표현된다). 여기서 희박하다는 뜻은 임의의 두 문서의 유사도..
17. 어려운 연습문제 17.16 마사지사 인기 있는 마사지사가 있다. 마사지 사이에 15분간 휴식이 필요하므로 마사지 예약이 연달아 들어온다면 그중에서 어떤 예약을 받을지 선택해야 한다. 연달아 들어온 마사지 예약 리스트가 주어졌을 때(모든 예약 시간은 15분의 배수이며 서로 겹치지는 않고 한번 예약이 되면 변경이 불가능하다), 총 예약 시간이 가장 긴 최적의 마사지 예약 순서를 찾으라. 17.19 빠진 숫자 찾기 1부터 N까지 숫자 중에서 하나를 뺸 나머지가 정확히 한 번씩 등장하는 배열이 있다. 빠진 숫자를 O(N) 시간과 O(1) 공간에 찾을 수 있겠는가? 만약 숫자 두 개가 빠져 있다면 어떻게 찾겠는가?
17. 어려운 연습문제 17.12 BiNode BiNode라는 간단한 자료구조가 있다. 이 자료구조 안에는 다른 두 노드에 대한 포인터가 들어 있따. public class BiNode { public BiNode node1, node2; public int data; } BiNode 자료구조는 이진 트리를 표현하는 데 사용될 수도 있고(node1은 왼쪽 노드를, node2는 오른쪽 노드를 가리키게 만들면 된다), 양방향 연결리스트를 만드는 데 사용할 수도 있다(node1은 이전 노드를, node2는 다음 노드를 가리키게 만든다). BiNode를 사용해서 구현된 이진 탐색 트리를 양방향 연결리스트로 변환하는 메서드를 작성하라. 값의 순서는 유지되어야 하며 모든 연산은 원래 자료구조 안에서(in-place..
17. 어려운 연습문제 17.9 k번째 배수 소인수가 3, 5, 7로만 구성된 숫자 중 k번째 숫자를 찾는 알고리즘을 설계하라. 3, 5, 7이 전부 소인수로 포함되어야 하는 건 아니지만 3, 5, 7 외에 다른 소수가 포함되면 안 된다. 이 조건을 만족하는 숫자의 예를 몇가지 나열해보면 1, 3, 5, 7, 9, 15, 21이 있다. 17.10 다수 원소 다수 원소란 배열에서 그 개수가 절반 이상인 원소를 말한다. 양의 정수로 이루어진 배열이 주어졌을 때 다수 원소를 찾으라. 다수 원소가 없다면 -1을 반환하라. 알고리즘은 O(N) 시간과 O(1) 공간 안에 수행되어야 한다.
17. 어려운 연습문제 17.8 서커스 타워 어느 서커스단은 다른 사람 어깨 위에 다른 사람이 올라서도록 하는 ‘인간 탑 쌓기’를 공연한다. 실질적이면서도 미학적인 이유 때문에 어깨 위에 올라서는 사람은 아래 있는 사람보다 가벼우면서 키도 작아야 한다. 단원의 키와 몸무게가 주어졌을 때, 최대로 쌓을 수 있는 인원수를 계산하는 메서드를 작성하라. 17.23 최대 검은색 정방행렬 정방형의 행렬이 있다. 이 행렬의 각 셀(픽셀)은 검은색이거나 흰색이다. 네 가장자리가 전부 검은색인 최대 부분 정방행렬을 찾는 알고리즘을 설계하라.
17. 어려운 연습문제 17.3 임의의 집합 길이가 n인 배열에서 m개의 원소를 무작위로 추출하는 메서드를 작성하라. 단, 각 원소가 선택될 확률은 동일해야 한다. 17.5 문자와 숫자 문자와 숫자로 채워진 배열이 주어졌을 때 문자와 숫자의 개수가 같으면서 가장 긴 부분배열을 구하라.