컴퓨터구조 & OS

🪄 문제점ssh 접속한 터미널을 종료시키면, 터미널에서 실행한 프로그램도 함께 종료된다. 예를 들어 ssh 접속 후 python3 test.py로 py를 돌려놓은 뒤 터미널을 끄면 py 프로그램도 꺼진다. 🪄 이유SIGHUP(signal hang up) 때문이다. 이는 hang up 즉 접속을 끊을 때, 터미널과 연결이 끊어졌을 때의 시그널이다. 그래서 현재 세션 종료를 통해 SIGHUP 시그널을 쭈루룩 전달받은 프로세스는 종료된다. 다음은 해결 방법이다. 🪄 SIGHUP 시그널 피하기! (백그라운드로 실행)백그라운드로 실행하여 내가 원하는 프로세스가 SIGHUP을 받지 않도록 하면 된다. 그러한 명령어인 nohup가 있다. 나는 bert_server.py가 SIGHUP을 받지 않도록 백그라운드로 실행하..
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 비정상종료 될..
멀티 태스킹 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 전용 이미지로 바꿔야 하는 줄 알았는데 아니더라! 또 밤새는 줄 알았는데... 너무 다행이다. => 결론: 밤새고있다ㅋ..
주의: 최대한 근거있게 작성해봤으나 잘못된 부분이 있을 수 있습니다. WSL과 VM의 차이점 이 질문을 왜 할까요? 아마도 "리눅스를 vmware나 virtualbox같은 VM으로 돌리는 거랑, WSL에서 리눅스를 돌리는 것의 차이점"이 궁금했을 것 같습니다. 제가 들었던 여러 강의에서도 종종 WSL과 VM의 차이점을 설명했습니다. 그리고 오늘 멘티에게 받은 질문이기도 합니다. 아마 배운 적이 있다면, 아래 그림이 좀 익숙할 것입니다. WSL과 VM의 차이점입니다. 그런데 저는 여기서 하이퍼바이저라는 개념이 어렵게 느껴졌습니다. 도대체 왜 둘다 하이퍼바이저가 들어가있는데 VM을 돌리려면 Hyper-V를 꺼야하고, WSL이나 Docker를 돌리려면 Hyper-V를 켜야 하는지 이해가 잘 안갔습니다. 바로 ..
ImportError: cannot allocate memory in static TLS block 나는 이 문제를 한번도 만난 적이 없는데, 어떤 팀원은 몇달 전에도 최근에도 이 문제를 만나곤 했다. visual-radio | ImportError: /usr/local/lib/python3.10/site-packages/tensorflow/python/platform/../../../tensorflow_cpu_aws.libs/libgomp-cc9055c7.so.1.0.0: cannot allocate memory in static TLS block 왜 또다시 누군 되고 누군 안되는 문제가 일어났을까? 결론은, M1, M2 CPU에서 tensorflw가 정상 동작하려면 python 3.8 버전을 사용해야..
도커는 큰 고민 없이 쓰면 되는 줄 알았다. 어떤 컴퓨터에서 띄우든 동일한 개발환경을 제공하는 것이 큰 강점이기 때문이다. 그러나 팀원들끼리 협업하면서 그런 생각이 문제라는 것을 깨달았다.어떤 도커 이미지가 window에서는 정상 동작하지만 mac에서 돌아가지 않았던 것이다. 처음 문제를 발견했을 때는 docker-compose.yaml에 platform을 다음과 같이 명시하는 것으로 해결이 되었다. 이때 직접적으로 느꼈다. 도커 이미지들이 호스트 시스템에 영향을 이런식으로 받는다는 것을.. * 참고로, 내 window에서는 명시 안해도 오류 안터졌는데, 나와 같은 amd64인 M1에서는 저 문제가 터졌다. amd64라고 명시하고 다시빌드하니까 해결되었다. * M2에서는 arm64/v8이라고 명시해주어야..
히어로맛쿠키
'컴퓨터구조 & OS' 카테고리의 글 목록