728x90
반응형

전체 글 552

누적합(prefix sum) 알고리즘

▶ 누적합(prefix sum) 알고리즘 누적합은 말 그대로 구간의 value를 누적합 형태로 구현하여 시간복잡도 측면에서 이득을 취하고자 하는 알고리즘이다. 일반적으로 사용되는 배열에 값을 저장하고 지정된 인덱스부터 하나씩 더해가는 방식은 최악의 경우 O(n^2)의 시간복잡도가 필요하기 때문에 입력 범위가 클 때 사용할 수 없다. 하지만 Prefix Sum방식의 누적합을 사용하면 입력과 동시에 누적합을 저장하고 필요한 구간의 값만 취하면 되기 때문에 O(n)으로 해결할 수 있다. 누적합은 문제에서 수열이 주어지고 어떤 구간의 합을 구해야할 때 쓰인다. 예를 들어 크기가 10인 배열에서 2번 index부터 8번 index 구간의 합을 구한다고 가정하면, 입력 후에 for문으로 다시 값을 구하는 것이 아닌..

Algorithm 2023.06.18

JVM이란? (Java Virtual Machine) JVM의 구조와 장점, 단점

▶ JVM (Java Virtual Machine) JVM은 'Java Virtual Machine'을 줄인 것으로 직역하면 '자바를 실행하기 위한 가상 기계'라고 할 수 있다. 자바로 작성된 애플리케이션은 모두 이 JVM에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다. 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점을 가지고 있다. 그러나 요즘엔 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어서 속도의..

JAVA/Java의 정석 2023.06.16

자바(Java)언어의 특징 - Garbage Collection, 동적 로딩, 네트워크 분산처리

자바의 가장 중요한 특징은 운영체제(Operating System)에 독립적이라는 것이다. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능하기 때문에, 운영체제에 따라 프로그램을 전혀 변경하지 않고도 실행이 가능하다. ▶ 자바 언어의 특징 1. 운영체제에 독립적이다. 기존의 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운양체제에 적용하기 위해서는 많은 노력이 필요하겠지만, 자바에서는 더 이상 그런 노력을 하지 않아도 된다. 이것은 일종의 에뮬레이터인 자바가상머신(JVM)을 통해서 가능한 것인데, 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다. 자바로 작성..

JAVA/Java의 정석 2023.06.15

[OS] Process Synchronization(2) - 프로세스 동기화

동기화 하드웨어 단일 프로세서 시스템의 경우 공유된 변수를 변경하는 동안에 인터럽트를 발생할 수 없도록 하면 위와 같은 문제를 보다 쉽게 해결할 수 있다. 인터럽트 억제 방법을 이용한 임계 구역 문제의 해결책 do{ disable interrupt critical section enable interrupt remainder section }while(1); 다중 프로그래밍에 큰 영향을 주므로 효율적인 해결책은 아니다. 다중 프로세서 시스템에서는 인터럽트가 발생할 수 없도록 하더라도 여전히 두 프로세서에서 두 프로세스가 동시에 실행될 수 있어 임계 구역 문제를 해결할 수 없다. 이 때문에 인터럽트를 억제하는 방법 대신 대부분의 시스템은 이런 문제를 해결할 때 사용할 수 있는 특수한 하드웨어 명령어를 제공..

CS/OS 2023.06.15

[OS] Process Synchronization(1) - 프로세스 동기화

프로세스 동기화 프로세스는 독립적으로 수행되면 올바르게 동작하나 공유 변수의 값이 결과에 영향을 주므로 병행으로 수행되면 실행되는 순서에 따라 올바르게 동작하지 않을 수 있다. 공유 메모리에 있는 변수 counter의 값이 5일 때, 생산자와 소비자가 각각 "counter++;"와 "counter--;"를 병행으로 수행하면 결과는 5가 되어야 하지만 그렇지 않을 수 있다. → 이처럼 병행으로 수행되는 여러 프로세스가 공통된 데이터를 조작할 때 결과가 접근 순서에 의해 결정되면 경합 상태(race condition)가 존재한다고 한다. 임계 구역 문제 임계 구역(critical section) : 프로세스 코드의 일부분으로서, 다른 프로세스와 공동으로 사용하는 변수, 테이블, 파일 등을 변경하는 부분임계 ..

CS/OS 2023.06.14

[OS] Memory Management(2) - 메모리 관리

하나의 프로세스 당 하나의 Page Table을 가지고 있기 때문에 이를 효율적으로 관리할 필요가 있음 따라서 Page Table Structure에 따라 구분 가능 페이지를 Hierarchical(계층적)으로 쪼갠 것 간단한 기술의 예로는 2레벨 Page Table, 위처럼 큰 범주로 먼저 나누고 그 안에서 또 나누는 형태 논리적 주소는 32비트, 4K 크기의 Page로 나뉜다. 한 테이블 안에 20bit -> 100만개 entries page offset은 12bit -> 4096, 4K 그림에서 보이듯 page number는 10bit씩 2개로 나누고 page offset은 12bit로 표현 p1은 outer page table에 사용되는 주소값, p2는 다음 level에서 사용(다음 내용 이어서)..

CS/OS 2023.05.29

[OS] Memory Management - 메모리 관리

모든 프로그램은 실행시키려면 메모리 위에 존재해야한다. Input Queue를 통해 메모리로 올라온다. Input Queue에서 기다렸다가 올라옴 사용자는 몇 단계를 거쳐 프로그램을 실행시킨다. source 작성 -> compile -> object module, 한 가지의 module만 존재하는 것이 아니기 때문에 other object modules과 연결시키기 위해 linkage editor가 존재 -> 그 결과로 load module -> loader로 메모리 load -> System library와 함께 load하여 사용 -> CPU 할당 받아 실행 Address binding : Instruction과 Data를 메모리 위로 올린다는 것 Compile time : Compile 하기 전 실제..

CS/OS 2023.05.27

[5월 18일(목)] 인공지능 입문(이론) - Build CNN, Avoid Overfitting

H : 150, W : 150 H : 150, W : 150, cn : 3, cw: 3, S : 1 (150 - 3) / 1 + 1 = 148로 32개의 겹겹 -> 148 x 148 x 32 : 1단계 MaxPooling(2, 2) -> 74 x 74 형태로 계속해서 하다가 마지막 layers.Dense는 1, binary Data(고양이, 개) 이므로 MNIST는 10이었음 2번째 conv할 때는 (3, 3)적용 -> (74 - 3) / 1 + 1 = 72가 됨 64개의 Filter였으므로 (3x3x32+1)x64 이거 꼭 해봐야함 dense layer(512) 계산하면 Parameter 값은 3211776 train data set은 200개 optimizer : 파라미터 찾는 것 loss는 bina..

2023/2023-1 2023.05.18

[OS] Deadlocks (2) - 교착상태

사용하는 변수는 4가지 Available : 여유분 Max : 최대 필요한 자원의 개수 Allocation : 할당된 자원의 개수 Need : 앞으로 추가적으로 필요한 자원의 개수 2차원 matrix형태로 모두 존재 앞으로 필요한 자원의 개수는 최대치에서 이미 할당된 자원을 빼준 정도 어느 한 순간 Safety한 상태인지 체크 여러 개의 process가 존재할 때 안정적으로 처리할 수 있는 순서도가 있는가 확인 fisnish가 false인 것 중 need(i)가 work보다 작거나 같은 것을 찾는다 만약 존재하지 않는다면 6단계로 Need는 필요한 만큼 줬다가 다시 회수, 여유분이 늘어나는 것은 이미 할당된 것들 회수 Finish[i]를 True로 전환하고 다시 2단계로 만약 모든 프로세스가 Finish..

CS/OS 2023.05.16
728x90
반응형