CS 6

락, 트랜잭션과 작업크기, 락대기, 교착상태

1. 락 스레드는 공유 자원을 사용하기 때문에 데이터의 정확성을 지키기 위해서는 각각의 스레드를 원자적으로 만들어야 한다. 원자적: 더이상 쪼개질 수 없고 한 스레드가 다른 스레드를 방해할 수 없음. 각각의 스레드를 원자적으로 만들기 위해서는 상호 배제 메커니즘이 필요하다. 이 상호 배제 메커니즘을 달성하게 해주는 것이 어드바이저리 락이다. 위쪽 스레드들에서 락을 먼저 하면 아래쪽 스레드들은 락이 해제될 때 까지 기다려야 한다. 락이 어드바이저리인 이유는 락을 지킬지 안 지킬지를 사용자가 아닌 프로그램이 결정하기 때문입니다. 이럴경우 스레드의 충돌은 해결하지만 한 스레드의 작업이 느리다면 다른 스레드가 오래 기달려야하는 문제가 발생할 수 있어 멀티태스킹의 장점을 잃어버린다. 2. 트랜잭션과 작업 크기 성..

CS 2022.02.22

동적 메모리 할당, 더 효율적인 메모리 할당, 가비지 컬렉션, 이중 연결 리스트

1. 동적 메모리 할당. 배열이 사용하는 메모리는 정적이다. 즉, 한번 정해진 메모리 크기에서 변화가 존재하지 않는다. 반면에 연결리스트의 노드들은 동적입니다. 즉, 이들은 필요에 따라서 자유롭게 생기기도 하고 사라지기도 합니다. 이러한 동적 메모리 할당은 메모리 영역중에서 힙공간을 사용합니다. MMU(메모리 관리 유닛)이 있는 시스템이라면 런타임 라이브러리가 프로그램에게 필요한 메모리 용량을 판단해 운영체제에게 요청한다. C언어에서는 대표적인 동적 메모리 할당 방법으로 malloc과 free함수가 있다. malloc의 작동 원리는 단일 연결 리스트 데이터 구조를 사용합니다. 전체 힙 공간은 처음에 한 블록으로 존재합니다. 이후 필요할때마다 필요한 크기만큼 블록을 만들어 할당한다. 프로그램이 free로 ..

CS 2022.02.16

파동에 올라타라, 범용직렬버스, 네트워킹

파동에 올라타라 우주에는 다양한 파장들이 있는데 그 중 가장 근본적인 파장은 사인파이다. 다른 모든 파장들은 사인파를 조합해 만들어낼 수 있다. 사인파의 형태입니다. 파장과 진폭은 위의 그림을 참조하세요. 1초에 몇번 반복되는 지가 주파수입니다. 다른말로 헤르츠, 초당 사이클이라 부릅니다. 파장과 진폭은 아래와 같은 관계를 가집니다. 따라서 주파수가 높아진다면 파장은 짧아집니다. 파장 = 파동속도/주파수; 우리가 데이터를 보내기 위해 사용할 파동을 반송파라고 합니다. 마크-스페이스 방식은 장거리 통신에는 적합하지 않다. 이 문제를 라디오를 가능하게 한 트릭을 적용해 해결할 수 있다. 반송파를 이용하면 장거리 통신이 가능하기 때문에 이 반송파를 마크-스페이스 파형으로 변화시키는 변조를 통해 해결할 수 있다..

CS 2022.02.09

메모리상의 데이터 배치, 프로그램 실행

1. 메모리상의 데이터 배치 메모리에는 명령어와 데이터가 존재한다. 데이터는 정적 데이터와 동적 데이터로 구분할 수 있다. 정적데이터는 프로그램 만들 때 크기를 알 수 있는 데이터들이고 동적 데이터는 프로그램 실행 전까지는 크기를 알 수 없는 데이터이다. 크기 고정 text: 실행 코드(명령어들) data: 전역변수(정적 데이터들) 동적으로 크기 변경 heap: 프로그램 실행중 동적으로 할당되는 메모리(동적 데이터) stack: 함수를 호출할 때 임시 데이터 저장 장소(함수 매개변수, 복귀 주소 및 지역 변수) 힙과 스택을 서로 충돌하지 않게 하는 것이 중요하다. 2. 프로그램 실행 어떤 함수는 여러 프로그램에서 쓸 만큼 유용한 경우가 존재한다. 이런 함수를 프로그램 만들 때마다 매번 새로 작성하기 보다..

CS 2022.02.05

시간표현과 상태기억

S-R래치를 통해서 정보를 기억하는 방법에 대해서 알 수 있었다. 여기서 더 나아가 원하는 시점에만 S-R래치를 작동시켜서 정보를 변경하거나 기억하는 방법이 존재한다. 1-1. 게이트가 있는 래치 NAND 결과표 ->하나라도 0이면 출력값은 1이고, 입력값이 1이 있다면 나머지 입력값에 따라 결과가 달라진다. 앞에서 배운 S-R래치에 게이트와 OR게이트 한쌍을 추가한 것. gate-bar값이 1일 때 set-bar와 reset-bar가 어떤 값이든지 상관 없이 출력은 그대로이다. (q = 1). gate-bar값이 0일 때 set-bar와 reset-bar값에 따라서 출력이 변한다. 우리는 이를 통해서 게이트가 있는 래치는 gate-bar값이 0일때(gate값이 1일때)는 입력값을 출력에 반영하는 것이 ..

CS 2022.01.29

문자를 사용한 수 표현, 색을 표현하는 방법

1. 문자를 사용한 수 표현 문자를 전송하기 위해 설계된 Media(Email, HTML)를 통해서 2진 데이터(이미지, 오디오 등)을 보내고 싶다. 그러면 앞에서 배운 아스키코드를 활용하여 2진데이터를 문자들로 인코딩하여 보내면 될까? 1.아스키코드에서 일부 제어문자 (e.g. Line ending)의 경우 시스템 별로 다른 코드값을 갖는다. 2.결정적으로 통신경로가 7비트 데이터만 지원하기 때문에 8비트의 아스키코드가 1비트 잘리는 문제 발생 가능하다. 위와 같은 문제로 2진 데이터들을 ASCII로 그대로 바꿔 데이터를 전달하기에는 위험하다. 그래서 등장하게 된 것이 QP인코딩과 Base64이다. 1-1 QP인코딩 QP인코딩이란 ? 출력 가능하게 변경한 인코딩 (Quoted-Printable enco..

CS 2022.01.21