원민수 : fput_needed가 1인 경우에 fput을 호출해서 file object를 제거하는데,
어떠한 경우에 fput_needed가 1로 셋팅되는지 확인.
보통 fput_needed는 0으로 설정 됨.
허경탁 : backing system에 대해서 게시판에 올려주셔야 함.
댓글 4
-
원민수
2008.04.14 01:52
-
김연찬
2008.04.15 08:55
스터디에서 주석 달았던 소스화일은 어디로 가야 볼수 있나요 ?
일요일에 했던 내용을 다시 보고 싶어요.;; -
허경탁
2008.04.16 13:02
(storage) backing store - Computer memory, usually magnetic disks, storing data and programs. Sections of this information can then be copied into the main memory (RAM) for processing. Backing store is cheaper but RAM is faster. Such a hierarchy of memory devices allows a trade-off between performance and cost.
주로 RAM과 하드 디스크 사이에서 자료를 주고 받는 것을 이야기 하는 것 같습니다. 좀 더 조사해서 올리도록 하겠습니다. ㅋㅋㅋ
제가 느림의 미학을 추가하기 때문에 성격이 급하신 분들을 위해서...
<Kernel Source>/Documentation/filesystems/vfs.txt
여기에서 "backing store"로 찾아보시고요, 해당되는 코드와 같이 봐야할 듯 싶습니다... :-)
PS. 위의 글 대략은 이해가 가는데, 좀 더 자세히 이해를 하고 싶네요.. 다음 번에 만나서 손 꼭 붙잡고서 이야기해요~~~ 으하하하..... -
원민수
2008.04.16 15:07
음.. 그러지요. 사실 코드를 삽입해서 설명하면 좀더 좋았을 거 같은데, 부분 부분 코드를 넣어야 하다보니, 사실 쉽지 않아서 글로만 설명했더니, 약간 설명이 난해한 부분들이 좀 있더군요. 이번주에 해당쪽 코드 보면서 좀더 자세히 설명드리도록 하겠습니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 파일시스템 스터디 관련 Q&A 게시판 입니다. [2] | woos | 2016.04.09 | 455 |
18 | 이번주 스터디 공지 [1] | 원민수 | 2008.05.02 | 10226 |
17 | 저기.. 저도 담주가 시험이라 불참할꺼같아요.. 죄송합니다.!(냉무) [4] | 정재우 | 2008.04.18 | 10168 |
» | 다음주까지 알아와야 할 부분. [4] | 원민수 | 2008.04.13 | 13703 |
15 | 담주가 시험기간이라 낼 참석하기 힘들것 같습니다. [ 냉무] | 이수연 | 2008.04.12 | 8600 |
14 | " |
fget_light/fput_ligth에 대해서 요약하면, open 등과 같이 file descriptor를 미리 얻었을 경우에 대해서 overhead를 줄이기 위해 생긴 함수라고 하네요.
현재 말씀드리는 상황은 sys_read에서의 상황입니다. 즉 적어도 현재 process의 file object는 열려 있다는 가정입니다.
간단히 말씀드리면, fput_needed가 설정될 수 있는 상황은 해당 file이 다른 프로세스에서 이미 사용중이라서 file->f_count->counter 값이 2이상인 경우에만,
fput_needed = 1 로 설정됩니다. 그러면 atomic_inc_not_zero()는 어떤 것이냐 하면, file->f_count->counter가 0이라면, 0을 리턴, 0이 아니라면, file->f_count->counter
값을 1 증가시킨 후 리턴하는 루틴입니다. 즉 fput_needed 값이 필요한 이유는 fget_light()에서 atomic_inc_not_zero를 통해 증가시켰던 값을 감소시키기 위해
fput_light()에서 atomic_dec_and_test() 매크로를 사용한 것입니다. atomic_dec_and_test은 1 감소시키고, 해당 값이 0이면 1, 0이 아니라면 0을 리턴하는 매크로이기 때문에, 대부분 counter값은 0이 아니겠지요.
왜냐하면, 다른 process가 사용하고 있을 뿐더러, 다른 process에서 close 했다고 하더라도, 현재 task에서도 close를 하지 않았기 때문에 1 이상일거라는 것을 보장하기 때문입니다.
물론 다른 process가 사용하고 있지 않고, close system call이 호출될때에는 fput()에서 해당 file object를 제거하겠지요~
이해 안되시는 부분은 리플 달아주세요~.