전체 글

여러분 안냐세욤
메서드나 생성자를 작성할 때면 매개변수에 어떤 제약이 있을지 생각해야 한다. 그 제약들을 문서화하고, 메서드 코드 시작부에서 명시적으로 검사해야 한다. 그렇게 매개변수 오류를 걸러내도록 해야 한다. ■ 매개변수가 유효한지 확인하라 API 사용자가 제약을 지킬 가능성을 크게 높일 수 있다. 다음은 전형적인 예다. /** * (현재 값 mod n) 값을 반환한다. 이 메세드는 * 항상 음이 아닌 BigInteger를 반환한다는 점에서 remainder 메서드와 다르다. * * @param m 계수 (양수여야 한다.) * @return 현재 값 mod m * @throws ArithmeticException m이 0보다 작거나 같으면 발생한다. */ public BigInteger mod(BigInteger ..
이펙티브 자바 남은 2023년은 자바 공부를 잘 해보려고 이펙티브 자바 Ebook을 구매했다. 한번 쭉 보면서 정리할 것이다. 갠적으로 정한 공부 순서 8장: 메서드 9장: 일반적인 프로그래밍 원칙 4장: 클래스와 인터페이스 10장: 예외 12장: 직렬화 2장: 객체 생성과 파괴 11장: 동시성 5장: 제네릭 6장: 열거 타입과 애너테이션 7장: 람다와 스트림 3장: 모든 객체의 공통 메서드 방향이나 목적의식이 없어도 무슨 일인가를 하면 어디론가 갈 수는 있다. 하지만 목적의식을 가지고 어딘가에 가는 경우라면, 반드시 가야 하는 그곳에 도달하기 위해 '해야만 하는' 행동이 따르기 마련이다. ─ the one thing, 187p
Process Control Block(PCB) PCB는 프로세스의 모든 정보를 가지고 있다. OS가 프로세스 스케줄링을 위해 PCB의 정보를 사용한다. 즉 OS가 다른 프로세스로 전환할 때(Context switch), 처리되고있던 프로세스는 자신의 PCB에 작업 정보를 저장한다. 그러면 이 프로세스가 다음에 다시 CPU를 점유했을 때, 이전에 하던 작업을 이어서 처리할 수 있겠다. ∨ PCB의 생성과 제거 생성 참고: https://studyblog4244.tistory.com/109 [운영체제] 3-2. 프로세스 생성 이번에는 프로세스가 생성되는 과정에 대해서 자세히 다뤄보겠습니다. 프로세스가 생성되는 과정 프로세스가 생성되는 과정을 단계별로 알아보겠습니다. 우선 프로세스는 fork()라는 시스템 ..
Intro 각 프로세스는 우리의 RAM에서 이런 구성으로 할당이 되어 돌아간다. * 참고(논외): 프로세스가 new상태일 때 값들이 세팅된다. 보조기억장치 내부에 Virtual Address Space(VAS, 가상 주소 공간)이 생성되는데, 거기에 이러한 값들을 준비둔다. 프로세스가 ready상태가 되기 전에 VAS의 값들을 메인메모리에 올린다. 매번 이렇게 RAM에서 활발히 돌아가고 있는 프로세스가 어떤 상태를 거쳐가며 실행되고 종료되는지! 즉 프로세스 상태도를 짚어볼 것이다. 프로세스 생성 프로세스 생성의 세가지 경우를 보자면... 1. OS가 생성 2. 현존하는 프로세스가 다른 프로세스를 생성 (부모 & 자식 프로세스) 3. 사용자 요청으로 생성 프로세스의 종료 프로세스는 정상 or 비정상종료 될..
가벼운 기록 글! 이번 2023년 9월 21일 전설의 목요일! 엔지니어링페어(공대축제)에서 최우수상을 탔다! (컴퓨터공학과 중 1등!) 지난 6월 23일 컴공/인공지능 창의축전때는 장려상이었다. 으으!!! 그때는 정말 살떨렸다ㅠㅂ ㅠ 지금 생각해보면 매번 역량 이상을 쏟아부었던 것 같다. 그렇게 한 학기를 (상당히 열심히) 졸프에 쏟았던 터라서 기대를 많이 했다. 그래서 장려상이 꽤나 아쉬웠다 (우수상 훼이크 사건도 한몫 함) 그렇지만 이당시 프로젝트의 단점은 분명했기에 장려상은 쉽게 납득이 되었다. 그리고 팀원들과 반성을 많이 했다. 대회가 끝나고 우리팀은 우리가 장려상인 이유 찾기, 한계점 파악, 방향 재설정에 최선을 다했다. 이번 엔페때는 크게 바라지 않고 그냥 열심히 발표하고 오자는 느낌이었다. ..
멀티 태스킹 Task(작업)을 OS의 스케줄링 기법에 의해 번갈아 수행한다. 스케줄링은 여러 방식이 있다. 혼용해서 쓰긴 하지만, 하나씩의 개념을 간단히 알아보자. - 멀티프로그래밍 방식 - 타임쉐어링 방식 (시분할 방식) - 리얼타임 방식 (실시간 시스템 방식) 멀티 프로그래밍 하나의 CPU에 대하여 RAM에 여러 프로세스를 적재하는 것임. 멀티 태스킹을 구현하는 스케줄링의 방식 중 하나이다. 유니 프로그래밍은 입출력을 기다리는 시간들이 굉장히 낭비입니다. CPU연산이 끝나고 I/O연산이 진행될 때는 CPU가 쓰이질 않는데, I/O가 끝나길 대기하게 됩니다. 반면 멀티 프로그래밍은 효율적입니다. CPU가 쓰이지 않을 때 다른 프로세스에게 CPU연산을 넘겨줍니다. I/O 작업으로 넘어갈 때, 끝나길 하염..
CUDA를 사용하는 프로세스 종료하기저희 flask 서버에서는 gpu를 사용하는 모델을 2개 돌립니다. - spleeter (mr제거) - cnn 분류기 spleeter 작업 후 cnn분류기가 연이어 있습니다. 문제는 spleeter가 끝나더라도 gpu 메모리가 곧장 내려가지는 않습니다. 정리해줘야 합니다. Out Of Memory가 잘 터지기 때문이죠! 그래서 gpu 정리 기능을 추가했습니다. gpu 점유 프로세스를 모두 정리하는 코드입니다. (의도치않은 gpu 프로세스가 종료되지 않는지 검토하고 사용해야 합니다.) (cpu 환경에서는 CudaAPIError가 터지기 때문에, 아무 것도 안하도록 예외처리했습니다.)from numba import cuda from numba.cuda.cudadrv.dev..
아래는 시행착오 글입니다. https://splendidlolli.tistory.com/648 Linux gpu 세팅[2] | 기존 컨테이너에서 GPU 사용하도록 변경하기 우리 서비스에서 각종 모델이 돌아가기 때문에 GPU가 있으면 좋다. (아니! 필요한 수준) 조교님께서 연구실 서버 + gpu를 사용할 수 있도록 해주셨다. (감사합니다) 어제는 GPU 세팅을 완료했다. 이 splendidlolli.tistory.com gpu 세팅하기는 버전호환 문제가 있어 꽤나 까다롭습니다. tmi를 말하자면 저는 컨테이너에 GPU를 구동하기 위해 필요한 것들을 설치할 때마다 시간을 굉장히 (하루이틀 온종일) 소비했습니다. 그러나 몇달전 도전에서 실패, 몇주전에도 실패했습니다. 그리고 이번에 성공했습니다! 실패의 이유..
우리 서비스에서 각종 모델이 돌아가기 때문에 GPU가 있으면 좋다. (아니! 필요한 수준) 조교님께서 연구실 서버 + gpu를 사용할 수 있도록 해주셨다. (감사합니다) 어제는 GPU 세팅을 완료했다. 이제는 우리 VisualRadio 서비스가 GPU를 사용하도록 컨테이너측에서 잡아주는 것만 남았다. (아직 정리하지 않아서 비공개 글이다!) 2023.09.07 - [미분류2023글] - Linux gpu 세팅[1] | nvidia driver, cuda, cudnn 그나저나 내가 어제 nvidia-docker2를 설치했는데 그럴 필요가 없다고 한다. 그리고 또 도커 이미지를 아예 gpu 전용 이미지로 바꿔야 하는 줄 알았는데 아니더라! 또 밤새는 줄 알았는데... 너무 다행이다. => 결론: 밤새고있다ㅋ..
· 미분류글
https://itsfoss.com/add-apt-repository-command-not-found/ [Solved] add-apt-repository Command Not Found Error Here's how to quickly fix the "add-apt-repository command not found" error on Debian, Ubuntu and other Debian-based Linux distributions. itsfoss.com nvidia driver 설치를 위해 repository를 추가하려 할 때 만난 오류다. sudo add-apt-repository ppa:graphics-drivers/ppa bash: add-apt-repository command not fou..
히어로맛쿠키
자꾸 생각나는 체리쥬빌레