컴퓨터과학 61

[Synchronization] Locks(Mutex)

💡Locks의 개념 ✅Lock 변수 : Lock 변수는 Lock의 상태를 담고 있다. * unlocked: 아무 thread도 lock을 갖고있지 않다. * locked: 딱 하나의 thread가 lock을 갖고 있으며 Critical section 내부에 있다. ✅lock() : lock 획득을 시도한다. 만약 아무 thread도 lock을 갖고있지 않았다면, lock을 획득하고 Critical section에 진입한다. 이 thread가 lock을 갖고있는 동안 다른 thread는 CS 진입이 불가하다. ✅fine-grained approach - better concurrency 여러 개의 변수를 보호하기 위해선 변수마다 하나씩 lock이 있어야 한다. lock() lock() CS1 unlock(..

[Thread] 스레드 사용의 목적, 스레드 vs 프로세스, 스레드의 자원, 스레드 API

💡스레드란 ✅목적 프로세스 간에는 서로의 데이터를 읽을 수 없다. 반면, 스레드끼리는 공유된 메모리를 통해 적은 비용의 커뮤니케이션이 가능하다. 이러한 스레드의 사용으로써, - 리소스가 절약된다. - 여러 request가 감당 가능해진다. - Input/Output 작동과 computation 작동이 동시에 일어날 수 있다. - context switching의 비용이 비교적 덜 든다. - multiprocessor에 더 잘 매핑된다. ✅스레드는 "함수"의 형태로 instruction stream을 실행한다. ✅Process vs. Thread 아래는 한 프로세스에 여러 스레드가 있는 예시이다. 반면 아래는 "프로세스"가 두 개인 것이고, 스레드는 활용되지 않았다. 💡스레드와 Address space 각..

[Process] Process의 개념, Address Space, State, Context switch, API

💡프로세스란 Program: 실행 파일. 코드와 데이터로 이루어져 있음. Process: program의 실행 중인 instance. 💡프로세스의 Address Space (Memory Layout) 모든 각각의 프로세스는 아래와 같이 자신만의 가상 메모리 주소 공간을 가진다. stack: 지역 변수 heap: 동적 할당된 변수 BSS: 초기화되지 않은 정적 변수 data: 초기화된 정적 변수 text: 프로그램 코드 💡프로세스 스케줄링 CPU 안에는 core가 있는데, 이 코어라는 것은 엄밀하게는 한 순간에 하나의 프로세스만을 다룰 수 있으므로, 여러 개의 프로세스가 (거의) 동시에 돌아가기 위해서는 교통정리, 즉 스케줄링이 필요하다. 프로세스의 state ✅New 새 프로세스가 생성되었지만, 아직 운..

[Stack Frame] 프로시저 호출 시의 스택 프레임 살펴보기

코드가 쭉 진행되다가 특정 프로시저가 호출되면, 프로시저가 실행되고 나서 다시 원래의 실행 흐름으로 돌아옵니다. 예시 코드 0x400000: call func: push  &  jmp 0x400005: mov esi, eax...0x401000: push rbp 0x401001: mov rbp, rsp 0x401004: sub rsp, 0x30 0x401008: mov BYTE PTR[rsp], 0x3 ...0x401020: leave: mov rsp, rbp  &  pop rbp 0x401021: ret: pop rip  &  jmp rip   빠르게 보는 전 과정의 메모리 변화  상세한 작동 1. 프로시저 호출2. function prologue: 기존 상태의 기록, 새로운 stack frame의 마..

[GitHub] 새 레포지토리에 로컬 폴더 업로드하기

1. 새 레포지토리 만들기 2. 로컬 폴더 위치에서 git bash를 열기 3. git init 4. git remote add origin 깃허브-레포지토리-주소 5. git branch -m master main 6. (레포지토리에 뭔가 있을 경우) git pull origin main 7. git add . 8. git commit -m "커밋-메시지" 9. git push origin main 10. (더이상 사용 안할 거라면) git remote remove origin

[Docker] multi-container application: Docker compose

이전 글 👇 2024.02.07 - [IT/DevOps] - [Docker] Database 유지하기: 2. Bind mount [Docker] Database 유지하기: 2. Bind mount이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공intoky.tistory.com Docker Compose 대부분의 Application들은 Database를 필요로 하고, Ap..

[Docker] Database 유지하기: 2. Bind mount

이전 글 👇 2024.02.06 - [IT/DevOps] - [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount [Docker] Container의 filesystem, Database 유지하기: 1. Volume mount 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Doc intoky.tistory.com Bind mou..

[Docker] Container의 filesystem, Database 유지하기: 1. Volume mount

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 공유하기: Docker registry, Docker Hub [Docker] Application 공유하기: Docker registry, Docker Hub 이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an applicat intoky.tistory.com Container의 filesyste..

[Docker] Application 공유하기: Docker registry, Docker Hub

이전 글 👇 2024.02.05 - [IT/DevOps] - [Docker] Application 업데이트하기 [Docker] Application 업데이트하기 이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 intoky.tistory.com Share the application ✅ 큰 그림 ✅Docker Hub에서 새 repository 만들기 repository 이름은 getting-st..

[Docker] Application 업데이트하기

이전 글 👇 2024.02.04 - [IT/DevOps] - [Docker] Overview, Containerize an application [Docker] Overview, Containerize an application Overview Docker는 우리가 만드려는 Application을 우리의 infrastructure(e.g. 호스트 컴퓨터?)로부터 분리할 수 있게 해줍니다. 따라서 이 Application의 배포가 더 용이해집니다. ✅아주 큰 구조 ✅그 중, Docker intoky.tistory.com Update the application 이미 어떤 App을 containerize한 상황해서, 이 App의 소스코드를 수정해서 다시 containerize하는 방법을 알아보겠습니다. ✅ ..