본문 바로가기

전체 글216

스레드 만들기 자바 스레드를 만들기 위해서 개발자가 해야 하는 작업은 아래와 같다.스레드 코드 작성JVM에세 스레드를 생성하고 스레드 코드를 실행할 것을 요청스레드 코드를 작성하기 위해서 Thread 클래스를 이용하거나 Runnable 인터페이스를 사용할 수 있다.Thread 클래스를 상속받아 스레드 만들기 ※ Thread 생성자  ※ Thread 주요 메소드void run()스레드 코드, 반드시 Overriding하여 스레드 코드 작성void start()JVM에게 스레드 실행 시작 요청void interrupt()스레드 강제 종료static void yield()다른 스레드에게 실행을 양보, 이때 JVM은 다른 스레드를 선택하여 스케줄링void join()스레드 종료까지 대기long getId()스레드의 ID 값 .. 2024. 11. 19.
자바의 멀티스레딩 멀티스레드와 JVM- 자바에는 프로세스가 존재하지 않고 스레드 개념만 존재- JVM은 멀티스레딩만 지원- 자바 스레드(java thread): JVM에 의해 스케줄되는 실행 단위 코드 블록자바 응용프로그램의 실행 과정1. 사용자가 자바 응용프로그램을 실행2. JVM이 먼저 실행3. JVM이 자바 응용프로그램을 로딩하여 실행4. 자바 응용프로그램 종료5. JVM도 함께 종료- 하나의 JVM은 하나의 자바 응용프로그램만 실행(* 이때 응용프로그램이란 main() 함수를 의미한다)- 한 컴퓨터에서 n개의 자바 응용프로그램이 실행될 때 n개의 JVM이 실행, 각각의 자바 응용프로그램은 별개의 메모리 영역에서 독립적으로 실행- 2개 이상의 자바 응용프로그램을 실행하려면 위와 같이 실행되어야 함- n개의 자바 응용.. 2024. 11. 19.
멀티태스킹 멀티태스킹 프로그램- 큰 규모의 응용 프로그램은 여러 작업(task)을 동시에 실행하는 경우 多- 응용프로그램의 여러 task가 동시에 진행되도록 하는 멀티태스킹 기법 사용스레드(thread): OS 혹은 JVM(Java Virtual Machine)에서 task 실행의 단위- thread of control- 프로그램 코드를 실행하는 하나의 실 혹은 제어의 개념- task마다 하나의 스레드가 생성되며, 하나의 스레드로 하나의 task만 처리 可- 스레드들은 상호 독립적- OS나 JVM에 의해 관리됨멀티태스킹과 멀티스레딩 멀티프로세싱(multi-processing)- 하나의 응용 프로그램을 여러 개의 프로세스(process)로 구성, 각 프로세스가 하나의 task를 처리하도록 하는 기법- 각 프로세스는 .. 2024. 11. 19.
백준 2343: 기타 레슨(python) 문제풀이 이진 탐색을 사용해 풀이하는 문제다. 파이썬의 bisect 라이브러리를 사용해 별도의 구현 없이 풀이할 수 있다. 이때 주의해야 하는 것은 블루레이 녹화 시 강의의 순서가 바뀌어서는 안 된다는 점인데, 초기 입력값을 정렬할 수 없으므로 이진 탐색을 수행하기 위해서는 배열이 먼저 정렬되어야 한다는 조건을 만족할 수 없다. 이진 탐색 문제로 분류되는 것을 보면 어떤 식으로든 정렬된 배열을 다루어야 할 것이므로, 관점을 바꾸어 입력된 배열이 아닌 입력값의 부분합 배열 sum[]을 이진 탐색에 사용할 수 있다. sum[i] = arr[0:i]인 sum은 항상 오름차순 정렬된 배열이므로 이진 탐색이 가능하다.문제를 풀이할 때 부분합 배열 sum[]을 직접 생성해 사용하지는 않지만, 전반적인 아이디어는 이.. 2024. 11. 18.
이진 탐색 이진 탐색(binary search): 정렬된 배열에서 탐색 범위를 절반으로 줄여 가며 목표 값을 탐색 정렬된 배열 arr에 대하여 탐색할 범위의 양 끝 인덱스를 각각 low와 high라 하고, 이 둘의 중앙값인 \(mid=(low+high)/2\)를 설정하여 찾고자 하는 값 value와 mid를 비교한다. value=mid이면 목표 값을 발견했으므로 탐색을 종료하고, valuemid라면 low를 mid로 갱신해 mid의 오른쪽 sub-array에 대해 탐색을 진행한다. 이진 탐색 알고리즘N개의 입력에 대하여 탐색 범위가 N → N/2 → N/4 → N/8 ... 1으로 줄어드므로 \(O(logN)\)의 시간복잡도를 가진다. 이진 탐색 구현 - 순환int binary_search_recur(int key.. 2024. 11. 18.
파이프라이닝 pipelining(1) 파이프라이닝이란 동시에 여러 명령어를 실행하여 명령어 처리 효율을 높이는 기법이다. 많이들 사용하는 빨래 예시로 설명해 보겠다. 빨래를 하는 과정은 세탁기 돌리기, 건조기 돌리기, 빨래 개기, 빨래 넣기의 4단계로 이루어져 있는데, non-pipelined 방식으로 빨래를 하면 다음과 같다. 하지만 실제로 이렇게 빨래를 하는 사람은 거의 없을 것이다. 보통은 빨래가 돌아가는 동안 빨래를 개는 등 작업을 병행하는데, 이것이 바로 파이프라이닝이다. 위 예시에서 각 단계별로 1시간이 소요되므로, n개의 빨래 더미(load)와 빨래를 끝마치는 데 필요한 작업의 수(task) k에 대한 총 작업 소요 시간은 \(\text{without pipelining: }kn\)\(\text{with pipelining: }.. 2024. 11. 4.
System Software and Program Execution(2) Library - Standard library header files          /usr/include   /usr/include/sys- 헤더 파일에는 라이브러리 함수의 선언만 있고, 실제 함수의 정의는 라이브러리 파일에 있는 것이 일반적Compile & Linking프로그램에 존재하는 모든 변수 및 함수의 정의가직접 작성한 소스 파일에 존재하거나(.o)직접 작성하지 않았지만 include 시킨 라이브러리 파일에 존재한다면(.a)실행 파일을 생성할 수 있다.Static Linking vs. Dynamic Linking Static Linking- 라이브러리가 프로그램의 실행 파일 코드에 포함(static library)- 실행 파일의 크기가 커짐- 동일한 라이브러리를 여러 프로그램이 각각 사용할.. 2024. 10. 17.
System Software and Program Execution(1) Program Execution 관련 System Software컴파일러: 고급 언어 프로그램을 기계로 번역어셈블러: 어셈블리어 프로그램을 기계어 프로그램으로 번역(ex: MIPS)링커: 여러 object file 및 library file을 하나의 executable file로 묶음로더: executable file 및 object file을 메모리에 올림- 상용 컴파일러 소프트웨어(gcc, visual c)가 컴파일러, 어셈블러 링커 등을 포함하므로 해당 소프트웨어를 사용하여 소스 파일 → 실행 파일 변환 한 번에 가능- 로더 기능은 유닉스, 윈도우 등의 운영체제에 포함되어 수행Programming Language 1. 고급 언어(High Level Language)- 인간이 이해하기 가장 쉬운 언어.. 2024. 10. 17.
Procedure Call in MIPS(3) jal(jump and link) [location]: 다음에 실행될 명령어(PC+4)를 $ra에 저장하고 location으로 jumpjr(jump register) [location]: location으로 jump 1. A) jal loc: loc으로 이동하고, PC+4(jal loc 다음 instruction의 주소)를 $ra에 저장2. B) sub $sp, 4: stack pointer 4 감소시켜 스택에 4바이트 공간 할당3. B) sw $ra, 0($sp): $ra의 주소(caller의 return address)를 $sp에 저장 → save 책임이 callee에게 있음4. B) jal loc2: loc2로 이동하고, PC+4(jal loc2 다음 instruction의 주소)를 $ra에 저장 .. 2024. 10. 16.
Procedure Call in MIPS(2) Stack 영역- 함수 호출 시 호출 이후에도 값이 유지되어야 하는 레지스터(참고)를 저장- return address의 저장- argument의 전달- 지역 변수를 위한 공간 할당(nested call; 중첩 함수를 지원할 수 있어야 함)※ Stack- LIFO(Last In First Out)의 자료 구조- $sp 레지스터가 stack의 가장 최근(=top) 저장 위치를 가리킴 스택에 정보를 저장하고 싶은 경우(4byte):sub $sp, $sp, 4          stack pointer를 4바이트 감소(아래로, 4바이트의 공간 할당)sw $t0, 0($sp)            $t0 레지스터에 있던 값을 $sp가 가리키는 공간에 저장 스택에서 정보를 인출하고 싶은 경우(4byte):lw $t0.. 2024. 10. 16.