Producer - Consumer Problem Producer 자원 : 비어있는 버퍼 공유 메모리(버퍼)에 접근하여 Empty-Buffer를 확인한다. 공유메모리에 접근할 때마다 빈 버퍼의 개수는 줄고, 데이터는 추가된다. Consumer 자원 : 채워져있는 버퍼 공유 메모리(버퍼)에 접근하여 Full-Buffer를 확인한다. 공유 메모리에 접근할 때마다 빈 버퍼의 개수는 늘고, 데이터는 줄어든다. 동기화를 위한 Semaphore 변수 Producer & Consumer가 존재하고 있는 상황으로 버퍼로의 동시접근을 막기 위해 Binary Semaphore로 lock / unlock 수행을 해줘야 한다. 즉, 버퍼에 생산자든 소비자든 동시에 하나만 접근해서 조작할 수 있다. 생산자/소비자의 자원 개수 ..
Why TCP? Q. 전송 계층에는 UDP, TCP 두개의 대표적인 프로토콜을 사용하는데 왜 나누고 어떤 경우에 TCP를 사용할까? A. UDP는 빠른 데이터 송/수신을 위해서, TCP는 Reliable한 통신을 하기 위해서 사용한다. Mechanism for Reliable Data Transfer Sequence Number 패킷의 순서를 정렬하기 위한 용도로 사용한다. 송신자에서 수신자로 흘러가는 패킷에 숫자를 매기는 용도이다. CheckSum 전송되는 패킷 데이터 bit의 오류를 검증하기 위해 사용한다. Error Detect 용도, FEC & CRC를 이용해서 에러를 찾고, 메꾸고, 유효성 검사를 한다. Acknowledgement 송신측에서 보낸 패킷을 수신측이 제대로 받은 경우 응답을 위해 ..
정규화 (Nomalization) 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션을 만들어가는 과정이다. 정규화를 통해 릴레이션은 무손실 분해 (nonloss decomposition) 되어야 한다. 릴레이션은 의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보 손실이 발생하지 않아야 한다. 분해된 릴레이션들을 자연조인하면 (pk를 기준으로 조인 & 중복 컬럼은 제거) 전의 릴레이션으로 복원 가능해야 한다. 정규형 (Nomal Form) 릴레이션이 정규화된 정도 각 정규형마다 제약조건이 존재한다. 정규형이 높아질 수록 제약조건이 많아지고 엄격해지며 마찬가지로 릴레이션의 데이터 중복이 줄어 이상현상이 발생하지 않는 바람직한..
Transport Layer Transport Layer is responsible for the delivery of a message from one process to another. 3계층과 뗄수없는 매우 밀접한 관계에 있는 계층이다. NAT의 경우 IP & PORT 의 조합으로 통신을 하게 된다. Network Layer : Host 간 통신 Transport Layer : network layer에 의존한 프로세스 간 통신 IP 주소 + Port 번호 -> Socket Address가 된다. 소켓 통신은 콘센트를 소켓에 꽂듯이 직접 연결해서 통신하는 방법이다. 트랜스포트 계층 역활 전송파트 Message를 전송할 만한 segments로 Dividing해서, Numbering하고, Sending..
Transport Layer (전송계층) 전송계층은 사용자 데이터를 상대 호스트의 상대 프로세스까지 전댈해주는 역활을 한다. 프로세스는 여러개가 동시에 실행될 수 있는데 Web 서버의 프로세스 클라이언트의 프로세스가 데이터를 주고 받기 위한 책임을 진다. 여러 프로세스 중 원하는 프로세스를 특정하기 위해서는 식별자를 통해 프로세스를 구별해야 하는데 이를 위해 사용하는 것이 Port Number (포트 번호)이다. Port Number 포트번호 실제 이름대로 항구의 번호를 의미한다. 원하는 도착지 (ex. 부산항)까지는 잘 왔으니 자신이 전달해줄 선착장을 구별해주는 용도이다. Port Number (Transport Layer 주소) Port 번호는 16bit로 2^16개가 존재한다. (65536개) 0 ..
Semaphore Cirtical Section에 대한 문제 해결 알고리즘을 추상화 시킨것. Integer 변수: 정수값은 자원의 개수를 의미한다. 아래의 두가지 Atomic 연산으로만 접근이 가능하다. Semaphore 변수 "S" P 연산 /* P 연산 */ P(S): if (S 0, S가 양수가 되면 자원을 획득 */ else S--; /* 자원 획득 */ S가 0이하라면 해당 프로세스를 Block 시킴. S가 1이상이라면 해당 자원을 획득하여 사용함. → 공유 데이터를 획득하는 과정, semaphore S의 값을 획득하는 과정 V 연산 /* V 연산 */ V(S): S++; // 자원 반납 wake_up(); /* block 중인 프로세스 깨움 */ → 자원을 사용하고 나서 반납하는 과정 S의 값..
RENAME 테이블 명을 변경할 때 사용 -- rename table show tables; rename table test_table to test_table1; show tables; ALTER 열과 관련된 수정을 할 때 사용 열의 이름을 바꾸거나, 타입을 변경, 추가, 삭제 할 수 있다. -- column TYPE 변경 desc test_table3; alter table test_table3 modify data2 varchar(10000); desc test_table3; -- column 이름&속성 변경 **이름만 바꾸더라도 속성은 그대로 꼭 적어줘야 한다. desc test_table3; alter table test_table3 change data3 data30 float(100, 4);..
Critical Section이란? 공유자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역 Critical-Section Problem n개의 프로세스가 공유 데이터를 동시에 접근하려는 경우 프로세스의 code Segment에는 공유 데이터를 접근하는 코드인 Critical-Section이 존재한다. 하나의 프로세스가 Critical Section에 있을 때, 다른 모든 프로세스는 Critical Section에 들어갈 수 없어야 한다. 프로세스의 일반적인 구조 do { entry section; // Critical Section으로 들어감 ~ Critical Section; ~ exit section; // Critical Section에서 나옴 remainder section; } whil..
이상현상 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용 정규화 이상현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정 이상현상 종류 삽입이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 갱신이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제 삭제이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제 예시 {학번, 수업, 가격} 투플을 갖는 수강 테이블이 존재한다고 가정. class Table; 100, c, 10000 101, java, 20000 102, python, 30000 103, c#, 40000 삭제이상 발생 100번 학생이 c 수업을 취..
Process Synchronization Process Synchronization 문제 데이터를 읽고 씀에 있어서 특정 주소 공간에서 값을 가져와서 연산 후 다시 저장을 하는 과정에서 프로세스끼리 충돌이 발생할 수 있다. 공유 데이터의 동시 접근은 데이터의 불일치를 발생할 수 있다. 일관성 유지를 위해 협력 프로세스 간의 실행 순서를 정해주는 메커니즘이 필요하다 Race Condition이란? A. 두개 이상의 Thread or Process가 공유자원을 병행적으로 읽거나 쓰는 상황을 말한다. Storage(Memory Address Space)를 공유하는 Execution(CPU Process)이 여러개가 있는 경우 Race Condition의 가능성이 있다. Multi-Processor Syste..
DB 트랜잭션 데이터 처리의 한 단위를 말한다. DB는 데이터를 저장, 수정, 삭제하는 작업을 바로 물리적인 하드디스크에 저장된 데이터에 적용하지 않는다. (메모리단에서 적용됨) 이는 개발자가 실수로 잘못된 명령문을 입력했을 때 다시 원래 상태로 되돌리기 위한 안전 장치이다. 개발자가 Commit을 하기 전까지 입력한 명령문은 메모리에서만 동작하다가 커밋이 발생하면 그때 하드디스크에 반영하게 된다. 데이터에 대한 작업을 하기 위해 입력하는 명령문들의 시작부터 커밋까지가 하나의 트랜잭션이다. 참고) MYSQL Workbench에서 COMMIT, ROLLBAKCK을 테스트하기 위해서 자동 커밋을 꺼준다. ROLLBACK 데이터의 저장, 삭제, 수정 등의 작업을 하고 난 후 원래의 상태로 되돌리는 작업이다. ..
INSERT 데이터를 로우 단위로 저장할 때 사용한다. insert into TABLE_NAME (col_name, ..) values (값, ..) insert into TABLE_NAME values (값, ..) -- col_name을 미 설정 시 빈 column에는 null값이 들어감. 컬럼에 저장될 값을 지정하지 않으면 null이 저장된다. INSERT 쿼리 예시 -- column명을 생략하여 넣는 경우 컬럼에 순서대로 들어감, 이때는 모든컬럼에 순서대로 값을 넣는 경우. insert into test_table values (1, 'first', 1.0); -- column명을 명시해서 넣는 경우 insert into test_table (data1, data2, data3) values (2..
- Total
- Today
- Yesterday