목록전체 글 (89)
학사 나부랭이
운영체제가 수행하는 핵심 작업 중 하나는 이용 가능한 자원을 관리하고 다양한 프로세스의 자원 요구를 스케줄링하는 것이에요. 이 자원 할당 및 스케줄링 정책은 다음의 세 가지 사항을 고려해야 하죠. Differential responsiveness(반응 시간 차등화) 다른 서비스 조건을 지닌 작업을 구별해야 해요. 그러면서도 운영체제는 모든 요구 조건을 포괄적으로 만족할 수 있도록 할당 및 스케줄링을 해야 하죠. 또 이런 결정을 동적으로 내려야 하죠. 만약 프로세스에게 입출력 장치를 할당했을 때 다른 프로세스가 이 장치를 요구할 것에 대비해 최대한 빨리 수행시켜야 하죠. Faimess(공정성) 특정 자원을 사용하고자 하는 모든 프로세스, 특히 비슷한 요구를 할 경우 그 자원에 동등하고 공정하게 접근할 수 ..
Deadlock(교착 상태)란 프로세스들이 더 이상 진행하지 못하고 영구적으로 블록 된 상태예요. 여러 프로세스들이 각자 가지고 있던 자원을 반납하지 않고 상대방의 자원을 요구할 때 발생하는데 이러면 응답 없음이 뜨고 해당 프로세스가 보유한 자원이 이 상태에서 벗어나기 전까지는 활용되지 못해요. Process P ... Get A ... Get B ... Release A ... Release B ... Process Q ... Get B ... Get A ... Release B ... Release A ... 3: 프로세스 Q가 자원 B를 획득하고 프로세스 P가 자원 A를 획득하고자 하는데 이 때, Q는 자원 A를 획득하려다 블록되고 P는 자원 B를 획득하려다 블록되어요. 서로 블록되어 기다리고 있기..
IPC란 무엇일까요? 서로 다른 프로세스 p1, p2가 있는데 p1이 작업 중에 문제가 생겨 p2의 메모리 공간을 침범(write)해버리면 프로세스가 개발자나 사용자의 의도대로 돌아가지 않겠죠? 이것을 비정상 공유가 이뤄졌다고 하는데 커널은 비정상 공유를 막기 위해 프로세스가 다른 프로세스의 주소공간에 접근하는 것을 금지하는 Protection을 해요. 그러고 커널만이 모든 프로세스의 메모리에 접근할 수 있도록 해요. 그래서 커널을 잘못 건드리면 전체 시스템이 오염될 수 있어요. 그럼 여기서 프로세스 사이에 통신을 하고 싶은데 어떻게 하면 될까요? 아 그래서 IPC는 언제 설명해줄거예요? 프로세스 사이의 통신은 IPC(Inter-Process Communication)를 통해서 해요. 커널은 프로세스 통..
동기화 공유되고 있는 변수를 사용해 한 프로세스가 작업을 하고 있을 때, 다른 프로세스가 사용하는 것을 막아주는 상호 배제의 한 방법이에요. 여기서 동시에 여러 프로세스가 한 자원에 접근해 조작할 때, 접근 순서에 따라 값이 변하는 상황이 Race condition이에요. 임계영역 Race condition이 일어날 수 있는 코드/부분/영역이에요. 여기에는 다음의 조건이 필요한데 먼저, 임계 영역을 가지고 있는 프로세스가 여러 개 있을 때, 반드시 하나의 프로세스만 임계 영역에 들어갈 수 있어야 해요. 그리고 임계 영역이 아닌 곳에서 멈춘 프로세스는 다른 프로세스에게 영향을 줘선 안 되죠. 임계 영역에 접근하려는 프로세스는 교착 상태나 기아가 일어나지 않아야 하고 임계영역에 들어간 프로세스가 없을 때, ..
프로세스 병행성은 병렬성과 헷갈릴 수 있는데 이 참에 차이를 확실히 두죠. 병렬성 Multi-Processing(다중 처리 시스템)인데 여러 프로세스가 각각 다른 CPU에서 수행을 할 수 있는 거예요. 아래를 보면 스펀지밥의 손이 여러 개고 각각 프로세스 하나씩 맡고 있죠? 병행성 CPU가 한 번에 하나의 프로세스만 실행하는데 대신 시간을 나눠서 여러 프로세스를 빠르게 전환해가며 실행해요. 그래서 마치 여러 프로세스를 한 번에 하는 것처럼 보이죠. 여기서는 스펀지밥의 오른손은 하나지만 소스도 뿌리고 뒤집개도 집는 프로세스를 빠르게 전환해서 마치 소스를 뿌리는 일과 뒤집개를 집고 있는 일이 동시에 일어나는 것처럼 보이죠? 병행성의 경우 프로세스 간 context switching(문맥 교환)도 일어나는데 ..
먼저 코드를 자세히 알아볼까요? fgets: 스트림(여기서는 아래의 stdin)에서 \n까지 또는 n-1개(여기서는 39개, 마지막은 null문자가 들어가야 해서 그래요.)까지 읽어 들이고 buf에 저장해요. \n이 있는 경우 \n까지 저장하죠. stdin: 표준 입력 버퍼, 그러니까 입력받은 데이터를 잠시 담아두는 메모리예요. 반대로 stdout은 출력할 데이터를 잠시 담아두는 메모리죠. strncmp: strcmp와 같은데 대신 범위를 지정하는 것만 달라요. 그래서 아래처럼 goo를 넣어도 2개만 비교하니까 go와 같다고 판단하죠. setreuid: 원형은 setreuid(ruid, euid)이며 ruid와 euid는 바로 아래에 다시 설명할게요. 여기서 setreuid는 ruid와 euid를 모두 ..
오랜만에 find 명령어를 다시 써보죠. find -size 옵션 2700: 2700 크기인 파일을 찾아요. -2700: 2700 이하의 크기인 파일을 찾아요. +2700: 2700 이상의 크기인 파일을 찾아요. 사이즈 단위 b: 블록 c: 바이트 k: 키로바이트 w: 2바이트 워드 m: 메가바이트 g: 기가바이트 저기 found.txt라는 수상한 파일이 눈에 띄네요. 한 번 읽어볼까요? shadow 파일 중 level9 라인만 따온 듯한 내용으로 차있네요. 얘네는 어떤 걸 의미하냐면... ⓐ User 이름이에요. ⓑ 암호에 관한 부분이에요. ⓒ 마지막으로 암호를 바꾼 날이에요. 1970.01.01 + ⓒ일에 암호를 바꿨네요. ⓓ 암호를 바꾸기 전의 암호를 사용한 기간이에요. ⓔ 암호를 수정 안 하고 버..
Brute-force attacks&Dictionary attacks 가장 간단한 방법들이에요. 비밀번호를 유추하고 그걸 해싱한 후 크랙 할 해시값과 같은지 체크하는 방법이에요. 브루트 포스, 무차별 대입이라고도 부르는 공격은 가능한 모든 문자의 조합을 해싱해 해시값을 비교해요. 한눈에 봐도 비용과 시간이 엄청 많이 들어 보이는데 대신 언젠가는 비밀번호를 찾아내요. 물론 효율은 최저죠. 사전 대입 공격의 경우 단어, 문장, 일반적으로 쓰이는 비밀번호, 그 외 문자열이 담긴 파일을 이용해 각각 해싱해 해시값을 비교해요. Lookup tables 시작할 때는 HDD에 있는 사전 파일만 가지고 있고 크랙킹을 시작할 때 사전(辭典)에 있는 비밀번호의 해시값을 사전(事前)에 계산하고 그와 함께 그에 대응하는 비밀..