Programming(36)
-
[OS] 메모리 구조와 낭비 방지Dynamic Loading, Dynamic Linking, Swapping
메모리 메모리용량도 많이 늘어났지만 처리하는 데이터(프로그램)가 더 커졌고, 처리도 빨라져야한다. 메모리는 언제나 부족하다. 그래서, 메모리가 작은데 어떻게 하면 효과적으로 메모리를 사용할 수 있는가 !! 가 관건이다. 메모리 구조 메모리 = address + data로 구성되어있고, 프로그램의 실행에 관여하는 파일들은 다양하다. source file : 어셈블리언어, high-level 언어 -> 이후 compile object file : 컴파일, 어셈블 결과 010101 -> 이후 다양한 obj 파일(컴파일한 소스파일, library) link executable file : 링크 결과로, 실행파일 (.exe) -> main.exe가 HDD에 있음 위 main.exe를 main memory에 loa..
2020.04.27 -
[OS] Monitor(모니터)
모니터 저번 포스팅에서 상세히 다루었던 세마포는 사실, 조금 오래된 동기화 도구였단 사실! 짜잔! java에서는 특히나 이 monitors를 동기화 도구로 사용하고있다. 세마포가 어셈블리 수준이었다면 monitor는 high level language수준이라고 볼 수 있다! 이미지 출처 : https://user-images.githubusercontent.com/34755287/54345852-3bd73680-4687-11e9-8c99-236870a019d9.png 공유자원 + 공유자원에 접근하는 함수 + 2개의 Queue(배타동기, 조건동기)로 구성되어있다. 최대 1개의 쓰레드만 공유자원접근함수에 들어갈 수 있고, 그 이상 들어가려고 하면 waiting해야한다. mutual exclusion (Que..
2020.04.25 -
[OS] Deadlock (교착상태)와 Deadlock 처리
Deadlock 프로세스는 실행을 위해 여러 hw자원(resources)을 필요로한다. 그리고 이 자원을 사용하는 application들이 있다. OS는 그 자원을 잘 나누어주어야한다. 예를들어 아래와같은 상황이 발생하면서도 공교롭게도 가끔, 아차! 싶으면, 교착상태가 발생한다. P1이 자원의 일부는 가졌으나 일부자원A는 가지지 못했을 떄, waiting해야한다. 다른 프로세스P2가 자원A을 가지려고 waiting하고있었을 때 둘다 기다리는 상태이므로 교착상태(Deadlock)의 가능성이 존재한다. 이 4가지가 모두 만족될 때, 교착상태가 일어날 수도있다. Mutual exclusion : 상호 배타. 한사람이 쓰고있으면 다른사람이 쓰지못하는 경우 Hold and wait : 어떤 자원을 가지고있으면서 ..
2020.04.24 -
[정보보안] nodeJS의 crypto module로 알아보는 Hash
Hash 데이터를 관리하고, 유지하는 자료구조이다. 리소스를 이용한 속도를 중시한!! 자료구조. 해쉬를 한마디로 요약하면 동일한 input -> 동일한 output 이라고 할 수 있다. 보안측면에서의 해시 해시함수란, 임의의 길이의 문자열을 받아 고정 문자열로 바꾸어주는 함수이다. 일정한 규칙이 존재한다. 동일한 input -> 동일한 output input 이 살짝 변경되어도 -> output은 어마무시하게 바뀜 항상 H(x)만 작동. H() 의 Inverse 불가능 Rainbow Table Attack 레인보우 테이블(해쉬값, 입력값 연결해놓은 테이블. 동일 input -> 동일 output의 취약점을 찾기위함) 에서 찾아보면 input을 찾을 수 있다는 발상에서 나온 공격법이다. Salt 그 Rai..
2020.04.23 -
[OS] 동기화와 Critical Section(임계구역) 문제
임계구역 문제 Critical Section, Critical Section Problem Critical Section(어떤 특정 코드가 작동하는 영역) Problem[임계구역 문제] : common variable을 update하는 구역에 생기는 문제들을 말한다. common variables 부분을 update하거나 write 하는 경우.. 다시한번 정리해보면 Critical Section : 하나의 시스템에는 여러개의 쓰레드(멀티 쓰레드)로 구성되어있는데, common으로 사용하는 부분이 있다. 그 부분을 업데이트 하는 부분의 코드를 말한다. 예를들어, Parent 클래스에서 계좌의 balance에 접근하여 연산하고, Child클래스에서도 계좌의 balance에 접근하여 연산하는 코드가 있을 텐데..
2020.04.22 -
[OS] Thread와 프로세스 동기화
Thread 쓰레드란, 프로그램 내부의 흐름을 말한다. 보통 1개의 프로그램에는 1개의 흐름이 존재하지만, 여러개의 흐름이 존재하는 경우 multiThread(다중 쓰레드)라고 한다. 이렇게 멀티쓰레드를 가질 수 있는 이유는, 쓰레드가 매우 빠른 간격으로 switcing 되고있기 떄문이다. 그래서 실제로 cpu는 하나이기 때문에 한개의 쓰레드만 실행될 수 있지만, 여러개의 쓰레드가 동시에 실행되는 것 처럼 느낄 수 있는 것이다. concurrent[실제로는하나지만빠른스위칭때문에동시처럼보임] vs simultaneous[실제로2개가실행.cpu가 한개일경우 이런일은 있을 수 없음 ㅎ]의 용어도 알아두자. 예시를 보면, 사실 대부분의 프로그램은 다중 쓰레드 프로그램이다. web browser - 화면 출력 T..
2020.04.20