전체 글 289

리눅스 환경의 시그널(signal)

시그널에 대해 알아보자. 이미 여러번 시그널에 대한 얘기를 했지만 이번에 이게 뭔지 제대로 알아 보자. 시그널은 소프트웨어(S/W) 인터럽트이다. 하드웨어 인터럽트도 있겠지? 그건 H/W 장치의 입출력에 대한 인터럽트이고, 시그널은 소프트웨어의 상황에 따른 인터럽트로, 비동기적인(asynchronous) 이벤트에 대한 핸들링을 하는 것이다. 예를 들어, 사용자가 프로그램을 멈추거나 종료시키면 발생하는 "메세지"정도로 보면 되겠다. (실제로 windows 환경에서는 signal 을 message 라고 표현함) 비동기적 이벤트란, 예측이 불가능 한 이벤트를 말한다. (동기적(synchronous) 이벤트는 scanf가 실행됐을 때 입력을 받아야 block이 풀리는 것 같이 예측 가능한 상황을 말함) 시그널의..

표준 입출력 라이브러리 (Standard I/O Library)

standard i/o 라이브러리 즉, #include 에 정의된 라이브러리 함수들에 대해 알아볼 것이다. 얘네들은 UNIX관련 표준은 아닌데.. 왜냐면 다른 OS에서도 이 친구들을 사용할 수 있기 때문이다. 표준 I/O 라이브러리 들이 대단한 이유는.. 역사를 좀 타고 올라가보면 Mike Lesk라는 사람이 처음에 Portable I/O 라이브러리를 만들었는데, 데니스 리치님께서 1975년경에 이것을 크게 뜯어고쳤는데 이게 지금까지도 별로 수정된 부분없이 계속해서 쓰이고 있다는 점이다. 쩐다.. 먼저 stdio를 공부하기 위해 스트림(stream)과 FILE 구조체에 대한 개념을 알아야 한다. 저번에 배운 File I/O 함수들, read, write, open 등의 함수들을 컨트롤하기 위해 파일 디스..

리눅스 프로세스 상호 관계

이전까지 프로세스를 어떻게 제어하는지에 대한 내용을 보았다. 이제 이 프로세스들이 서로 어떤 관계들이 성립하는지에 대한 내용을 볼 것이다. 먼저 UNIX 시스템에 사용자가 로그인하는 과정에 대한 얘기를 해볼까 한다. 터미널 로그인에 대한 내용을 보겠다. 먼저, init 프로세스가 터미널이 생성될 때마다 fork로 복사가 된다. 하나의 터미널당 한번 init을 하나씩 복사하는 것이다. 그리고 exec류 함수를 이용하여 fork로 생성된 자식 init 프로세스를 getty 라는 프로그램으로 변경한다. 지금 상태의 getty는 텅텅 비어있다. (getty는 터미널을 열고 초기환경 설정 및 시스템에 열린 터미널을 관리하는 프로그램이다.) 자 이제 getty가 실행이 되었다. 그다음은 getty가 다시 exec류..

리눅스 프로세스 생성, 실행 그리고 제어

프로세스 생성 자식 프로세스를 생성하는 fork 함수에 대해 알아보자. 보다시피 반환값을 2가지 가진다 (실패 제외) 자식프로세스 값, 부모 프로세스 값. 자식은 getppid() 함수를 이용해 부모 프로세스의 pid를 얼마든지 알아낼 수 있고, 부모는 하나뿐이지만 부모는 여러개의 자식프로세스를 가질 수 있고 별도의 자식pid를 알아낼 함수가 존재하지 않는다. 보통 자식프로세스가 생성되면 부모의 pid값에 +1한 값이 자식프로세스의 pid이다. fork가 자식프로세스를 생성하고 나서도 부모, 자식 프로세스 두가지 모두 정상적으로 실행된다. fork로 생성된 자식프로세스는 부모 프로세스의 복사본이다. 다만, 코드(텍스트) 세그먼트는 복사하지 않고 공유한다. 중요한 것은, 자식은 부모와 메모리 영역을 공유하..

리눅스 환경의 시간과 날짜

시간과 날짜에 대한 시스템콜들을 알아보겠다. time() 부터 보겠음 time 함수는 현재 시간값을 반환하는 함수이다. 근데 시간 계산이 좀 특이함. 리눅스의 기원? 시간이 1970년 1월 1일 00시 00분 00초 부터 시작해 저 시간 부터 초 단위로 계산하여 현재 시간을 구한다. 아 그럼 gettimeofday 함수는 뭐지? 좀더 상세하게 ms(밀리 세컨드) 단위로 계산하는 것이다. tp라는 timeval 구조체를 가르키는 포인터에 현재 시간을 저장한다. tzp는 NULL을 무조건 넣어야 한다는데.. 유닉스 규격에 그렇게 되어있단다. gettimeofday 함수같이 밀리 세컨 까지 표기하는 것은 몇몇 시스템에서 굉장히 효과적일 수 있다. 시간이 정말 중요한 그런 부분.. timeval 구조체는 아래와..

반응형