본문 바로가기

Computer Science

(46)
[Lecture 11] 멀티쓰레딩 V - Deadlock #Deadlock 데드락, 즉 교착상태란 2개 이상의 배타적인 자원을 2개 이상의 프로세서 또는 태스크가 부분적으로 각각 점유하고자 함에 따라 일어나는 상태이며 그것 이상 어느 쪽도 진행되지 않는 상태를 말한다. 그림은 태스크 A가 파일 A를 점유하여 파일 B의 점유해제를 기다리거나 태스크 B가 파일 B를 점유하여 파일 A의 점유해제를 기다리게 되어 양 A, B 태스크가 모두 이것 이상 처리가 진행되지 않는 상태의 예를 나타낸다. 쉽게 말해 하나 이상의 관련 스레드가 차단된 스레드의 원인이 되므로 절대 발생하지 않을 이벤트를 기다리는 상태이다 (리소스 에서 데드락이란: 스레드는 현재 리소스를 요청하는 스레드에 의해 보유되므로 허용되지 않는 리소스를 기다리는 동안 차단된다.) Deadlock은 리소스 경합..
[Lecture 10] 멀티쓰레딩 IV - Condition Variables & Monitors #Condition Variables & Monitors / 조건 변수 & 모니터 조건 변수(mutex와 함께)는 모니터라고 하는 더 큰 추상화의 구성 요소이다. 동시성 프로그래밍에서 모니터(Monitor)는 스레드가 상호 배제와 특정 조건이 거짓이 될 때까지 기다리는(차단) 기능을 모두 가질 수 있도록 하는 동기화 구성체이다. 모니터는 또한 다른 스레드의 조건이 충족되었음을 알리는 메커니즘을 가지고 있다. 모니터는 뮤텍스(lock) 개체와 조건 변수로 구성된다. 조건 변수는 본질적으로 특정 조건을 기다리는 스레드의 컨테이너이다. 모니터는 스레드가 배타적 액세스 권한을 다시 얻고 작업을 재개하기 전에 특정 조건이 충족될 때까지 대기하기 위해 일시적으로 배타적 액세스를 포기하는 메커니즘을 제공한다. 쉽게 ..
[Lecture 8] 멀티쓰레딩 II - Basic Locking / Managing Shared State #Introduction 멀티스레드 프로그램은 가상 주소 공간을 공유하기 때문에 주소 공간에 할당된 모든 개체(글로벌 변수, 힙 개체 등)에 직접 액세스할 수 있다 Preemptive scheduling 체제에 의해 도입된 non-determinism 및/또는 여러 프로세서 또는 코어에 대한 동시 실행은 이러한 공유를 어렵게 만든다. (예: counter++) #Data Races 데이터 레이스란 멀티 쓰레드 환경에서 여러 쓰레드가 공유자원에 동시에 접근할 때 유발되는 문제이다. 두 개 이상의 스레드가 공유 변수에 액세스하고, 적어도 하나의 액세스는 쓰기 액세스이며, 최종 결과는 스레드의 실행 순서, 특히 메모리 액세스 순서에 따라 달라진다 이러한 데이터 레이스는 동시성(concurrency) 관련 버그..
[Lecture 6] Linking and Loading - Part III #Software Engineering Aspects #Static Libraries 정적 라이브러리(static library) 또는 정적 링크 라이브러리(static-linked library)는 컴파일 시 호출자에서 해결되고 컴파일러, 링커 또는 바인더에 의해 대상 응용 프로그램으로 복사 되어 객체 파일과 독립 실행 파일을 생성하는 일련의 루틴, 외부 함수 및 변수이다. 일반적으로 사용되는 함수를 개체 .o 모듈로 미리 컴파일하고, 그 .o 모듈을 .static 라이브러리라고 불리는 archive로 패키징한다. .a archive는 간단한 순차 archive를 생성하는 ar(1) 명령에 의해 유지 관리된다. 중요: .o 모듈은 archive에 포함되거나 전혀 포함되지 않기 때문에 C 라이브러리(li..
[Lecture 6] Linking and Loading - Part II #Software Engineering Aspects #Local vs Global Symbols 링커의 관점에서, 개별 .o 파일의 기호는 전역적이거나 로컬이다 Assembly level: default값은 local이다. 그렇지 않으면 .globl로 state해야함 C level: default값은 global이다. 로컬로 만들려면 static으로 state해야함 참고: 로컬/글로벌 변수와 로컬/글로벌 변수의 다르게 사용가능. 여기서 "local"은 컴파일 유닛에 대한 로컬, 즉 .c 파일(헤더 포함)을 의미한다 서로 다른 컴파일 단위의 로컬 기호가 분리되고 서로 충돌하거나 다른 단위의 글로벌 기호와 충돌하지 않는다 #Conflict Resolution Rules for Global Symbols 만..
[Lecture 6] Linking and Loading - Part I #Linking and Loading - Big Picture #Compiler and Assembler Preprocessor는 #include 파일들의 텍스트 삽입을 수행한다 컴파일러는 다음과 같은 기호 이름을 확인한다: 로컬 자동 변수 (Local automatic variables), 함수 매개 변수 Field names in structures 어셈블러가 relative branches들에 대한 특정 레이블을 확인한다. 결과로 나온 relocatable .o 파일은 범위가 전역인 모든 함수와 변수에 대한 기호 이름을 유지한다 #Relocatable Object Files – Text Section 여러개의 섹션을 가지고 있음 각 섹션은 0에서 시작하는 것처럼 레이아웃됨 Relocation rec..
[P1] The Customizable Shell #Shell Concepts shell 셸이란 무엇일까? 셸이란 명령어를 해석하는 데 사용하는 프로그램 즉, Command Interpreter 이다. 셸은 사용자가 입력하는 명령어를 해석하고 수행하여 그 결과를 화면에 표시하여 준다. 셸을 터미널과 같다고 생각할 수도 있는데, 터미널은 셸의 프론트 엔드라고 생각하면 된다. #Behind the Scenes of a shell FOUR STEPS for non-built-in 셸이 사용자 입력을 기다린다 셸이 command를 해석한다 프로세스를 fork한다 Foreground일 경우 parent process는 child process가 끝날때까지 기다린다. Foreground가 아닐경우 parent process가 process를 반복한다 (child ..
[Lecture 4] Implementing Job Control Shells #Job Control Job control, 작업 제어란, 유닉스 및 유닉스 계열 운영 체제에서 셸(shell)에 의한 작업 제어, 특히 인터랙티브(interactive)에 의한 작업 제어를 가리킨다. 기본 작업 제어 기능은 작업/프로세스 그룹의 모든 프로세스를 일시 중단, 재개 또는 종료하는 것이다. 작업 제어의 고급 기능으로는 작업에 signal을 전송하여 수행할 수 있다. 리눅스에서 모든 프로세스들은 시그널이 전달되면 종료되게 돼있다. #Job Control Shells 작업 제어 Shell은 사용자가 command-line에서 프로그램을 시작하고 관리할 수 있도록 하는 제어 프로그램이다. 작업 제어의 코어는 "read-evel" loop을 포함한다 Shell은 내장 명령 (built-in com..