스택메모리: 함수가 종료되고 돌아갈 메모리주소, 함수의 지역변수 저장. 높은곳에서 낮은곳으로 쌓아 올린다.
힙메모리: 개발자(사용자)의 동적 할당 영역, 런타임시에 적용되어 예측 불가. 낮은곳에서 높은곳으로 내려간다. 선입선출
동기/비동기: (순서와 결과의 관점): 요청에 대한 응답을 바로 처리해야하는가?/ 나중에 처리해도 되는가?
blocking/non-blocking : (쓰레드 제어의 관점): 요청에 대한 응답을 기다리는동안 가만히 있는가?/ 다른일을 하는가?
-----------특성---------------
1. 상호배제 - Mutual exclusion- 하나의 자원에 하나의 프로세스(쓰레드)만 접근 가능하다.
2. 비선점- 자원을 갖고 있는 프로세스에게서 뺏을 수 없다.
-----------상황------------
3. 점유 대기 - 서로가 원하는 자원을 소유하면서, 상대가 자원을 내놓기를 대기하는 상태
4. 순환대기 - 모든 프로세스가 자원을 소유하면서, 상대가 자원을 내놓기를 대기하는 상태가 원형으로 이루어진 상황
캐시메모리내에서 최근에 가장 덜 참조된 것을 새로운 것과 교체한다!
자료구조로 구현 --> 더블 링크드 리스트(순서를 저장) with 해시테이블(접근,검색할때 사용)
해시테이블을 통해 해당 데이터가 캐시(링크드 리스트)에 있는가 확인
있으면 링크드 리스트 접근해서, 해당 데이터 삭제하고 head에 새로 삽입
없으면, 링크드 리스트 head에 삽입
페이징: 논리 메모리를 동일한 크기의 '페이지' 블록 단위로 나누어, 물리 메모리에 배치.
물리 메모리에 비연속적으로 배치 가능 --> 외부 단편화 문제 해결. but 연결 관계를 파악해야 하기에, mapping table 필요하다.
단점: 내부 단편화(해결 못함), 페이지 테이블(mapping table)--> 메모리 용량 크다. --> 여러 가지 해결책 존재
---------연결-------------
3. 파이프: 단방향 통신, 동기화 가능
4. 소켓: 양방향, 동기화 가능
5. 메세지 map
6. shared memory: 물리 메모리 영역에 shared memory 영역 존재, 각 프로세스마다 이 영역을 가르키는 포인터 존재.