목록OS (5)
KoreanFoodie's Study
윈도우 시스템 프로그래밍에서 파일을 생성하고 읽기/쓰기를 수행해 보자. 먼저 아래에 MSDN에서 가져온 예제 코드를 살펴보자.파일 읽고 쓰기 :해당 코드는 CreateFile()과 WriteFile() 함수를 이용해 파일을 생성하고 값을 입력하고 있다. 이때, CreateFile()에서 이미 있는 파일을 새로 생성하려고 하면 에러코드를 반환한다(에러코드 80).만약 log 파일을 만들고 싶은데, 이름이 같은 파일이 있을 시 덮어쓰고 싶다면? CreateFile() 함수의 CREATE_NEW부분을 바꿔주면 된다! (예제 코드 아래에 상세 설명)#include #include #include #include void DisplayError(LPTSTR lpszFunction); void __cdecl _tm..
리눅스 쉘에 환경변수 경로를 추가해보자! 가끔씩, 리눅스에서 실행파일을 쉽게 실행시키고 싶을 때가 있다. 우분투 소프트웨어에서 인식하는 소프트웨어의 경우 window키를 누르고 입력해서 실행시킬 수도 있겠지만, 등록이 안 된 소프트웨어의 경우 실행파일이 설치된 경로로 들어가서 파일의 이름을 쉘에 쳐야 하는 불편함이 있다. 실행하고 싶은 프로그램 vivado.. 그냥 찾으려고 하면 안보인다. 이를 해결하기 위해, 환경 변수 PATH에 해당 바이너리 파일이 설치된 경로를 추가해 줌으로써 쉘을 키자마자(Ctrl+Alt+T) 해당 파일을 실행 시킬 수 있다! 방법은 간단하다. 쉘 실행후, home directory에서 vi ~/.bashrc를 실행한다. .bashrc 파일의 마지막에 아래 코드를 추가한다. ex..
프로세스 스케줄링과 시그널에 대해 알아보자 먼저, 프로세스가 어떤 state를 가질 수 있는지부터 알아보도록 하자. 위 그림을 통해 하나하나 각 상태가 어떤 의미를 가지는지 나열해 보겠다.Running/Runnable(R)이름에서 쉽게 유추할 수 있듯이, 이 상태는 프로세스가 동작하거나, 동작할 준비가 되었다는 것을 의미한다. 동작하고 있다는 것은 쉽게 이해가 가는데 동작할 준비가 되었다는 것은 무슨 뜻일까?Runnable 상태의 프로세스는 runqueue에 들어가서 실행되기를 기다린다. 이것이 유저 스페이스에서 프로세스가 실행될 수 있는 유일한 상태이다. 스케줄러는 해당 runqueue를 확인한 후 CPU가 어떤 작업을 수행할지를 결정하게 된다.UnInterruptible Sleep(D)이 상태는 시그..
lsof, kill 등의 커맨드를 사용해서 프로세스를 조회하고 관리해보자.가끔씩, 리눅스에서 프로세스가 종료되었으나 창이 닫히지 않아 짜증이 나는 경우가 있다.이 경우, 프로세스 PID를 확인해서 이를 강제로 종료시켜주는 방법을 사용해 볼 수 있다. 이 글에서는 총 3가지의 방법을 소개한다.toptop command를 이용하면 현재 돌아가고 있는 프로세스에 대한 정보들을 쉽게 조회할 수 있다.top command는 프로세스의 ID이외에도 CPU, Memory 사용률 등의 정보를 확인할 수 있어 매우 유용하게 쓰일 수 있다. 맨 왼쪽의 PID를 이용해서, terminal에 아래 커맨드를 입력한다.kill -9 PID // kill -9 -PID -> PID를 가진 프로세스 그룹 전체를 종료한다.이때 kil..
Implement a simple linux shell with pipe and more! 리눅스 쉘에서 파이프, 리다이렉션을 구현해 보자 I'm going to present how to solve execercise 11, chapter3, from Operating Systems: Principles & Practice,2nd Edition. Problem specificatoin : implement a simple linux shell in c capable of executing a sequence of programs that communicate through a pipe. For example, if the user types ls | wc... So the problem is how t..