Hello, we are here to present who is using what where and analysis of the stakeholder usage of services and collections during the COVID-19 pandemic for CNI briefings. I'm Rusty Mahalek, Director of the Library, Archives and Learning Center at Goldie Beacon College. Hello, my name is Monica Rieschewi and I'm the Director of Course Operations for Forte Labs. We will share the results of our analysis of stakeholders usage of the library services and collections during the COVID-19 pandemic. The time period covered March 2020 through the end of April 2021 includes several different operational models from completely closed with all services available only remotely online to reduce staffing and hours with safety restrictions in place including no book checkouts. Stacks were closed through the current model of reopened stacks with reduced staffing hours and social distancing restrictions. Goldie Beacon College was founded in 1886 and has been located in a variety of places in Wilmington. Presently, GBC is located in suburban Wilmington, Delaware. The college offers 41 degree programs in business, psychology, English, criminal justice and others to undergraduate, graduate and doctoral students. The resources included in this study are EBSCO, the Discovery Layer to Electronic Resources, Gale which has primarily resources for digital humanities like primary sources, Springshare is our website and portal to resources, the HLLC computers which are located in the physical library and Open Athens which is our authentication service. There are three phases to this study. Phase one was a pre-pandemic library which with a date range of August 2019 to March 2020. Phase two was a completely closed library which the date range of April 2020 to August 2020. In phase three, library opened during the pandemic, date range of September 2020 to May 2021. Next we're going to talk about our research questions and results that we analyzed. Research question one, where did library use occur more often on campus or off campus? With research question one, we take a look at EBSCO, Gale and Springshare, their collective usage by sessions on campus versus off campus from August 2019 through May 2021. As you can see from this slide, off campus usage was higher than on campus usage, 27,964 sessions versus 18,177 sessions. For research question two, during which phase were the resources used most remotely? Again, we took a look at our data from EBSCO, Gale and Springshare by usages analyzed by sessions on campus versus off campus. This time we're taking a look at it by phase. As a reminder, as Rusty shared earlier, phase one was before the pandemic. Phase two was during the pandemic with the college completely closed. And phase three includes now with the college opened with its new schedule and social distancing restrictions in place. During phase one, the usage on campus versus off campus collectively was very close. On campus, 10,838 sessions versus off campus of 10,609 sessions. During phase two, off campus was clearly much higher than on campus with 6,100 sessions versus 785 sessions. And phase three, which includes the present time, on campus is higher than it was during the pandemic shutdown, but certainly still lower than off campus usage with 6,553 sessions on campus versus 11,255 sessions off campus. Usage by phase, by service. Taking a look at phase one, usage by resource. We have a breakdown between EBSCO, Gale, Springshare, and computer usage. It's important to note that computer usage includes the HLLC library computers that are on campus at Goldie Beacon College. Springshare had the most resource usage by resource clearly with sessions of 10,618 on campus versus 10,401 off campus. When we took a look at electronic resources like Gale and EBSCO, Gale was slightly more than EBSCO with 204 on campus usage versus 164 off campus. During phase two, again, this is when the college was shut down. Usage by resource, Springshare was still clearly the winner here with 5,395 off campus session usage versus 682. Gale, again, more than EBSCO here, 602 off campus versus 100 on campus. For phase three usage by resource, we start to see in all categories numbers ticking slightly upward. So with Springshare, we have 6,116 on campus versus 10,492 off campus and we have an increase in Gale that's notable for off campus usage. 543 off campus versus 220 off campus with Gale. Additional insights that we discovered from looking through the data during these three phases. First, we wanted to share a bit about open Athens. Open Athens is an authentication and electronic access management system that provides unified access to the library's licensed online resources via single sign on SSO technology both on and off campus. The OA dashboard provides an overall report of logins into our electronic resources. This table or graph shows us open Athens logins unique user counts by phase. So in phase one, we're looking at the lowest level of open Athens authentications, 1,312. Phase two, 3,651 versus the present time included 12,288. So you definitely see an uptick in the number of users that are authenticating into resources. It's important to note that we limited the reporting for this to be only the resources that we were analyzing for this particular study. Gale, Springshare and EBSCO because we do use open Athens for other services like Zoom, for example, and that had an astronomical increase in usage during the pandemic, but we excluded that from this analysis. Library computer usage. You're seeing a photo right now of the library's computer lab. And what you can see is that prior to the pandemic, 50 computers were located in the library. This is probably the majority of them actually in this room. The rest are out on the library floor. Presently 30 computers are located in the library due to social distancing guidelines. So some computers were taken out. Six to eight computers are scheduled to be added by the end of the fall 2021 semester due to increased usage by students, staff and faculty. This graph shows you on-campus library computer usage's unique uses by FACE. So looking at phase one, 1,966 uses, phase two down to 10. We're going to hypothesize here that this was quite likely due to OIT, our Office of Information Technology, doing updates. There were still some IT staff on campus occasionally during the shutdown. Back to the current timeframe, 1,618 uses during phase three. Now we're going to do it and discuss the data informed decision-making from the data we gathered. We're used to looking at usage statistics from various resources to justify the impact they have on users to secure further funding from administration and other stakeholders. Even though we map resources to the curriculum as part of our pre-licensing assessment, limited usage over a period of time forced us to consider cutting your resource. And that was some of the gale rate sources. Since the pandemic, decreasing enrollment in higher education, especially at the regional and local colleges forced the library to review the budget. For example, in 2021, the DBA was put on hold due to declining enrollment in that program. Consequently, resources that were purchased to support the curriculum in that program needed to be reviewed to be captured or canceled. A potential sticking point, however, was the canceling of some resources from gale might increase the cost of other resources from that same vendor because of the deal we negotiated with them before the pandemic. Little to no use of gale resources begs us to ask the question, how else can our budget be spent that has more impact on student success? Openathon log is increased dramatically since the pandemic began. Because of the streamlined access to electronic resources, it was easier to make the case to license other electronic resources even though our budget had not increased in more than 10 years. We were able to subscribe to Alexis Nexus Package of journals for our doctoral program based off of use and requests. The doctoral students requested the electronic resources after trying to log in unsuccessfully into Alexis Nexus Package via openathens. Computer usage on campus has also almost returned to pre-pandemic usage, even though the number of computers in the library has increased due to social distancing guidelines. We are working with OAT to increase computers in the library based on the log-on data shared but still are following social distancing guidelines. We use spring share as our portal to resources for learning, teaching, and research. Website sessions drop during the pandemic but has almost returned to pre-pandemic levels. However, more users are accessing spring share off-site rather than on campus. That is in part due to reduced visitors and lower enrollment. Since log-ins into spring share is higher off-site, we ensure that there are guides sharing how to access the resources off-campus on the website. Staff time is devoted to creating guides that make it clear how to access resources and tools. Users log-in to resources more often remotely than not on campus so we need to increase the training guides. We have rewritten job descriptions and created new positions that address off-campus access to all resources including spring share, EPSCO, Gail, etc. We have a library assistant position opening whose principal job duties focus on instructional design tasks and projects. Next we talk about outreach. The data we collected demonstrates what we might need, that we might need to rethink our proportional strategies. How can our message change to promote Gail resources to faculty who are more likely to be encouraged use of these materials? How can we tailor our marketing campaign to users who do not use library resources? The data shows us that a percentage of unrolled students are not using our resources and logging to the computer in the HLC. Why? What promotional strategies can we try to convince users to use library resources and collections? Which courses are students enrolled in who do not use the resources and collections and for the users who do not use the resources which courses are enrolled in, how can we reach them or the faculty that teach those courses? The decisions that we made from based off of outreach to increase outreach in the precode carried phase one. We conducted in-person one-shot information literacy sessions that primarily focused primarily focused on due to faculty requests accessing and navigating the databases. English 176 for undergraduates took an asynchronous training with six online modules and a pre and post assessment. The doctoral program took only the asynchronous training with six online modules and a pre and post assessment that measured their information literacy skills. But no training was provided by librarians that demonstrated to the doctoral students how to access and navigate the databases. When the pandemic started we created an asynchronous information literacy session program with a video of a librarian demonstrating to students how to access and navigate the databases in 12 online training modules that taught students information literacy concepts. We marketed the new program new ILA program to all degree programs in undergraduate masters and doctoral levels via a drip campaign through ConvertKit an email marketing tool in Kiddins text messaging marketing tool. We also send email via ConvertKit promoting tool resources and services to targeted audiences since how we helped students do the librarians working from home students taking online courses or what the college called live online courses. Fewer and fewer students enrolled in in-person classes resulting in fewer visits to the physical library. The questions about accessing the databases increased which led to an increase in the request for additional resources. Students staff and faculty became more comfortable accessing libraries resources using open Athens. This led to us picking up science direct from Elsevier. A DBA student reached out to the librarians for a new resource which led to the acquisition of it. We specifically promoted our virtual reference desk our zoom TV and the campus wide get help service point since more students were accessing our resources remotely. Next we talk about we will discuss operations and the decisions that were made from the data that we gathered. We also have to look at staffing models when examining the usage of these libraries resources how do we support users if more users log into resources in the evening do we staff the virtual reference desk with more staff members to answer questions asked virtually in the evening and vice versa. Do the staff members need to work on campus to answer questions if most of our users are asking questions remotely. Regarding library staffing on campus with more usage recurring remotely time now has spent creating training videos which potentially could be done when working from home. We have noticed in-person reference and technical questions have not returned to pandemic levels therefore library staff spend more time manning the virtual reference desk while doing other job-related tasks. At the beginning of the pandemic many users were unfamiliar with authenticating the open Athens so we created training guides showing them how to access resources via single sign-on because our users are now more familiar with open Athens a single sign-on access management system we receive more questions about accessing materials we don't have. We now have a fewer computers than we did pre-pandemic but also almost as much usage. As usage increases we will work with the office of information technology OIT to increase the number of computers while also following social distancing guidelines. Next we'll talk about the limitations we experienced with this particular project. First PII versus non PII data. PII or personally identifiable information versus non personally identifiable information. PII data provided by logins to our electronic resources is used by library decision makers in some of the following ways. What resources for example SAGE, COHA, ProQuest, EBSCO are undergraduate students using the most. How are electronic resources distributed by students by academic major? Are graduate students using electronic resources? Do students who attend library information in person tutorial sessions access electronic resources after the session for the first time or at higher rates? We also use non PII data. Non PII data such as logins by IP address is used for the following reasons protects privacy it collects data in the aggregate review and share it in a faster manner and it's difficult to make categorical with non PII data. So there are certainly limitations of using PII versus non PII data. Open Athens there's some limitations with it as well which we recognize during the study. It doesn't collect on campus versus off campus logins. So while we had a plethora of data about open Athens logins we couldn't determine where these logins took place. It gives only a bird's eye view of what library users are doing. So for example we know that they went into Gail versus spring share versus EBSCO but not what they actually did when they entered those services. We can't determine where geographically library users are accessing resources and this is something we would have particularly liked to know during the pandemic as we know a lot of our students went back to their homes as opposed to staying on campus. Thank you very much for attending and watching our presentation today. If you have any questions please don't hesitate to contact either of us. Again my name is Monica Rochabee and my email address is rysavym at gbc.edu and my colleague Rusty. My name is Russell Mahalik and my email address is miscalr at gbc.edu. Thank you for watching our presentation and have a great day.


Last man. Dr. Barrow. And then right here. Over here. One pulling this way. One pulling this way. We're not taking contact. Alright, common circle over here. Hey, everybody get in a circle! Hey, if you will not load it. Got it. Got it. Audio. Let's go to the new Jordan. I didn't have to move in. I didn't have to move in. I didn't have to move in. I didn't have to move in. I didn't have to move in. Okay.


Hello everyone, welcome back to another Photoshop tutorial. This one gonna show you how to remove text, difficult text from photo. Like look at this, this is an Avengers poster. I removed the text and it still looks good underneath. How did I do it? Let's go step by step and I'm gonna walk you through it and talk you through it. Okay, so here's our poster, here's our video, here's our shot. We wanna remove the text. First thing I'm gonna do is I'm gonna drag and drop it and create a second layer, a duplicate copy.  In this case, we're going rectangular and I'm gonna go ahead and draw around the selection just like this. Now I'm gonna go ahead and zoom in a little bit here and you'll notice that if I hold down the alt key or the option key, I can remove parts too. So this part here, I don't need. See what I'm doing here? So I'm just removing little bits and pieces that I don't really need to do any content to wear fill on. So I'll do this really quickly here but just keep in mind that this is optional part of me, but it's something that I like to do. I like to keep it as close and tight as possible. So there we go, something like that, okay? Good, now we're gonna go ahead and we're gonna go up here to edit and we're gonna go to something called content to wear fill. Let's click on that and you're gonna see in one second, it's gone. That's it guys, I'm gonna hit okay. It selected it and now I'm gonna go to select, deselect and it's history gone there. That's all it is guys, thanks for watching.


We derived Pb equal to RT, we derived the Cb equal to 3 by 2 R all these things. Then we also did the diatomic. In monatomic we did the entropy which is the circuit tectonic equation which is an extremely useful as I told you of when we did it we thought it is useful at all. But I told you that we are using it every day like in paper we are writing now on entropy of water we use this entropy of circuit tectonic equation that expression we use. Amazing that how that seemingly in of course simple expression can be used in a very complex situations that is not. Then we did harmonic oscillator and we got an expression for entropy of oscillation and that again goes over to the entropy of the specific heat of solids what I am saying and divide it. Same expression you know I am just trying to tell you the reach that you do want tiny little thing through statistical mechanics. There is no other way you can do that this Einstein or Debye Einstein theory or specific heat comes through this partition function that is what I instant it. He just calculated the specific heat through V to the power minus half h mu by kBT by 1 minus e to the power minus h mu by kT square right that is and you have a density of states d omega then you integrate that okay. Then we did entropy and specific heat and specific heat of that is what we Einstein entropy of the vibrational modes also very important. So when I calculate entropy of solid or free energy of solid how do I do it theoretically. I calculate the enthalpy which I can do through computer simulations or I can some kind of Madeline constant remember the sum coming over all the interactions if they are charged and computer simulation we can do that I take an FCC lattice and I calculate the interaction energy by adding up all the interactions. But then I need the entropy you would think that entropy of solid is very small not quite entropy of solid may be significant because of the low frequency of oscillations and vibrations in many solids.  That is the first thing you would solid state physics you know like normal modes in a linear approximation. These things go very well in linear response theory that is very very important to understand. So free energy of solid if you want to calculate we just published a paper very long paper 10 years worth of work with my Japanese collaborators Shinji Saito and Yawominem and where we tried to get the super cool liquid and glass the free energy of the thing and specific heat and entropy and we use this exactly the expression should be right here the entropy we remove the kinetic energy then we diagonalize if the disorder thing we get what is called quench normal modes and we then use those normal modes to calculate the entropy and the specific heat and that was came out I think earlier this year or end of last year probably earlier this year long paper. Now many many people are doing that so the specific heat and entropy of harmonic oscillator that you will learn in the here is used in practical applications in many many cases then comes the rigid rotator with the rigid rotator and we assume a rigid rotator because we assume the rotation and vibration are uncoupled which we know is not correct because we in undergraduate physical chemistry when you do spectroscopy infrared spectroscopy you get PQ at those branches which are because vibration and rotation talk with each other corollaries coupling or centrifugal thing that it rotates very fast then the bond gets stretched or compressed this the rotation vibration rotation coupling is a wonderful stuff tells you lot of thing most importantly it tells you about the anonymity of vibration and that is a very very important quantity for our understanding a bond breaking and the activation barrier all these are very neatly and very succinctly coupled and is a unified concept that we use one side spectroscopy and other side statistical mechanics and other side quantum chemistry and quantum mechanics rigid rotator entropy and specific heat we do not have a simple analytical expression unless we make low and high temperature assumptions when you do that we get you know expressions and then we when you do the calculations you find if a molecule like water the entropy from rotation about 30% I show you the table that of the okay but all these things that we did I am just summarizing and reminding you because they are very important things where non-interacting limit I have a rigid rotator I have a diatomic molecule I have a monatomic molecule but they are interacting within themselves there are intramolecular forces but there are no intermolecular force these molecules did not interact however you want a water water or your human body unless molecules interact with each other you would not have a glass you would not have a crystal everywhere molecules interact that is where I quoted Paul you was fond of saying that I created contest matter in the means you know the repulsion were not there it would not have formed crystal the solid state the hard sphere crystal the simple potential is the role our model of studying solid state or liquid solid transition so now how do I go about doing interactions I know the partition function I know the partition function is sum over e to the power e i by k b t I will today I will give a flow chart that is what I am talking so much and then we will do the calculations which are a little formidable so one of the will be in a in rigid rotator we found the degeneracy factor remember 2j plus 1 that was in rigid rotator you have done in quantum mechanics harmonic oscillator the atomic this gi equal to 1 particle in a box gi equal to 1 right other way to do is classical this indistinguishability Boltzmann put by hand and this is the one that we know after doing quantum the best way to think about it to get this factor is to do the quantum and then come to classical from quantum which is an exact way of doing and you find that you have much of that this is other way you can have a conceptual saying okay this is normalization of the volume of a cell but that kind of thing I do not particularly encourage I would rather say do the quantum and then come to classical so and the Hamiltonian this is the total Hamiltonian kinetic energy and potential energy okay and this quantity u is the many times we do not write all these things we just I get here and we put a prime here that is the that make people standard notation we just do that then you do not have to write all this it is understood so we are further assuming that interaction there is a two-body interaction means we are saying two part that if I have a three particles 1 2 3 then this interaction is some of PROS interaction that could be a three particle interaction also which are important in some cases but understanding much of condensed matter physics we do not need this three-body interaction that is a fine tuning we need sometimes but like doing a liquid silicon we need the three-body interaction but you know much of the time that because when you are kind of near metal or metal white kind of things then three-body and many four-body interactions play important role. So now this is popular saying that the bull by the horn that means you have to do these complex things these integration where in a classical thing we can do the momentum integration because uncoupled is a bunch of Gaussians I do not need to write that I will be cavalier about it because I know how to do it so basically this is the thing I need to do so again if I need I will put them back I do not care about them so I will write Zn by n factorial I will not write the other thing 1 over n factorial so this is the configuration integral I have taken out the momentum path you understand that I have integration of beta H beta H Hamiltonian has kinetic energy and potential energy they are uncoupled the potential energy part kinetic energy part pi square by 2m they are nothing but Gaussian and not only that i and j are uncoupled x y z are also uncoupled so I can do the 3n integrals and then I get lambda to the lambda is the de Broglie wave then 3n by 2 that is the partition of that I am not just not writing because that is the part which we have to circuit to the equation and pb equal to nk but ideal gas but right now I am not interesting that many times we when you do the free energy we write free energy a equal to a ideal plus a excess and a ideal because this is free is a ideal part comes as a product here correct you understand that because it is a minus beta H and is the exponential so that become product then I take the log free energy log of partition function and then the product comes out separately that I call ideal a ideal is the ideal gas free energy which we did and this is the excess part and this is the interesting part this is the part we are now trying to do so this part comes from the interactions of particles and which is highly non trivial I will go back and forth I will use this little bit then I will go back because I want to give a flow chart I want to tell you how the thing is done so that you get the big picture and then doing the equations is filling this big picture but going directly to the details does not help if you do not get the big picture because this is the big picture that will stay with you the understanding the details will be remain in books which are always look up okay that is the way actually to do any interesting stuff okay so we did this here this this and this interaction potential we discussed at hand and this is the pair wise interaction potential is the total potential energy and as I just discussed here this is the quantity and I said I do not care about this part because this part is the ideal gas part so when I take the log of that free energy I get and then I get everything from the energy the reason you work in canonical ensemble is because I get entropy and pressure by taking derivatives okay it is far more complicated in getting a function and doing of course a very difficult because you know way to go this particular box but then in other systems with continuous potential you have no way to go when you go to micro canonical ensemble okay so this is the thing then so as I said before that this comes in a exponent u and u is a sum so I put that sum here then when I put this sum here this is like that then I realize that this quantity is nothing but product the sum here the sum comes out as a product okay and then I looked at this integral and I had to do this integral in a very very difficult way because two things this integral the first this potential is fairly complex and to make it worse this potential goes to zero when separation between two particles i and j becomes larger which indeed it should be it should go to zero but that creates the problem is that I have to do this integral and if I do that integral then that integral goes to one you do not want that you do not want the asymptotic part goes to one you know you want that asymptotic part goes to zero okay and that is what may I did then the it saturates the unity and that becomes the hard so partition function fails to convert also difficult to do then introduce may I function so may I function is the following function if this is the so the quantity that comes is e to the power minus beta you are this quantity this quantity that is the one we are dealing with that the beast and why it is a beast because this if the simplest interaction potential is that so there are two part of the interaction potential one is this part which excludes particles volumes excludes certain regions of the configuration space to my particle because they are interacting and they are harshly policy but short distance then however other than that it has a entire volume to itself that part comes from here okay so he then consider this he said okay let me introduce this function a and that then is like that his own sole idea was to make it go to zero so it now it goes to zero all right and this is my it will be sometime we call it exponential bond because to a chemist these are essentially bonds they are interacting they are not chemical bonds but we will call some them call them physical bonds but this has become minus one now now the advantage is that if I put this into there I will get this this kind of terms now it has becomes I can decompose it into smaller parts that is important thing before I could not do anything like I can do something okay so then as we discussed the other day this is the decomposition I did with three particles then the first one is I put it here sum over one term is the first term is the one second term is a two particle term next term is a three particle term so one part is just a dot go line then the second is the bond FIH is a bond that connects these two particles then this this has the three kind of then forth like that total number of particles in the system is so ML now we say okay ML is the number total number of molecules in a cluster of size well so cluster of size two how many total number of molecules two here three so now however so instantaneously at a given position like in this in this room I have oxygen and nitrogen and say I have n number of them and let us consider all the nitrogen so I have n number of nitrogen and now I any times they they are mostly dispersed in the room but now and then they come together and they form clusters they are clusters of diatoms they are clusters of triatomic there may be little bit more of that okay much of much of the time I can describe this room by the function F12 at most they are diatomics you know but you understand that whenever they are one is coming under this sphere of interaction of the other through interaction potential I draw a bond but these bonds are flickering bonds they are breaking and forming because as molecules coming together and going away okay and but the instantaneous state of nitrogen in this room is given by the ML you know and as as we are talking and if the n number of nitrogen molecule then M1 is 90% of that okay and then 10 8 of the 10% another 90% are this one binary interaction and this small number will be turner interaction so you immediately see if I want to describe the nitrogen in this room I only need the turner term that much I can I can see beginning to see an approximation at the low density that I can do with ideal gas plus a correction and that correction is the F12 now I go to denser gas I go to nitrogen little bit denser and then to liquid then I need all the terms but I have a systematic way to add them this scheme will not work all the way but it will take us far and then a different theory takes over okay but it is it is the beginning now we define the cluster integrals called mirror cluster integral which are in a given class a class is characterized by L we are not making a distinction between these and these now we can then consider all these clusters now what are the clusters just in Feynman path integral anywhere these these are nothing but this general language of physics we started 1937 Mayer's paper these are nothing but integrals so when you say graphs in physics they are integrals okay and then these most powerful language in many body physics in chemistry we use it in theory of liquids even the these these people the quantum chemists they do this t operator expansion all these the different things essentially e to the way e to the word t and very similar things goes on there so there are certain universality and understanding all these things you understand one you basically know why one is doing this so this is then we can now calculate the okay but the dot first one is this quantity v1 v2 is this quantity and v3 I sum over everything remember that these are the my these these three these three and last one the formidable one is this one I can go on writing like that so these are the Mayer introduced and this is a cluster integrals it is called reducible cluster integrals because this can be further reduced into this part and this part okay this is called irreducible we will handle we will deal with there and this is reducible okay but this can be explained in terms of this one okay now next what may I did okay as I told you that we are going to divide and conquer we had full partition function we are reducing this total partition function into the cluster integrals then we reduce the cluster integrals even further called reducible cluster integrals then you will see under certain approximation the reducible cluster integrals are nothing but virial coefficients suddenly you see oh I can now have other sum limit this beautiful thing is rather complicated theory of though beautiful we can connect it to experiments and you will see that that that that's really very very nice okay now what we did we have to now find out the what is the decomposition decomposition I want to express the partition function in terms of this reducible cluster integrals how do I do I know ml is the number of clusters of size l and then I say okay and this is my definition remember that this is kind of a normalization factor put in here l factorial because the number of ways I can arrange two factorials will come one is l factorial and this ml factorial and as I was saying this is the kind of things looked into from the multinomial theories or the way or you can arrange the particles in a box and you name the box one two three four like that and this is my l the number written on my box is l so when I have two particle cluster I put it l equal to two I have a three particle cluster I put it l equal to three now each of these l equal to three I have the three particle clusters and I number of three particle cluster in my box level three is m3 okay and this is the way one does exactly this problem is done in combinatorics okay when you do that this is what is the configuration integral of that this is just this thing because ml of them okay and this is the weight so this what is trivial right okay little less trivial is total number of ways we can combine them I have n of them into groups of l and this is the distributed in unnumbered piles of l object is this is the quantity so the total partition function is the product of the two when you do the products there are certain cancellation l factorial get cancelled ml factorial survive and VBL to the power ml and this is the beautiful expression is the called it is exact used also in quantum it is called mere r cell cluster expansion so this is an expression of the partition function it has certain advantage certain disadvantages but whatever it is it is exact so this is called decomposition is so beautiful let me write it down okay so this is the quantity I wrote down and the way to work with this exact partition function is to consider what you call thermodynamic limit we have to take n going to infinity V going to infinity such that n by V rho equal to constant all right that the limit we will take we will ignore this for the time being we will come back okay now something very interesting how did mere go further and derive two very very important thing which we call cluster expansions one is the density in terms of LBLZL I will come back but I just want to mention this two we can derive it from non canonical partition function also another thing is the pressure in terms of BLZL I am giving you and then come back and so these things that will derive now so look at the beauty density is LBLZ where D is the fugacity which is done just like beta in canonical ensemble beta become 1 over KBT how how did beta enter into the into the description in canonical partition function yeah absolutely Lagrangian multiplier here also what is the constraint this is the constraint and that constraint enters through Lagrangian multiplier now beta enters through which constraint energy exactly so and temporary energy are conjugate quantities right so here what is the conjugate of them absolutely and then this is e to the volume by KBT so fugacity is just beautiful these things are so I have an expansion I will derive in a minute density in terms of cluster integrals and now I have little bit more work I get now pressure another equation I will derive is this I told you I will give you a flow chart so I have an expansion these are called cluster expansions they can be derived also through a in canonical partition function but that that does not have the physical picture it has ok mass theory now I give you two expansions one is density in terms of fugacity then I give you another pressure equation of state now if I give you two series and I tell you to eliminate this you have done in your class 11 eliminate fugacity give me an expansion of pressure in terms of density ok I give you everything I give you all the coefficients I have not told you how you are going to calculate them I will tell you that but I eliminate I can eliminate like I have given two series one series is density in terms of fugacity other series pressure in terms of fugacity now I tell you eliminate fugacity give me a series of pressure in terms of density this is possible so long the both these series are convergent right when you do that you get the variable series that is the thing I kind of jumping and telling you the what is the flow chart now we have we start with the partition function we are getting a decomposition which is the cluster decomposition and exact partition function in terms so we form earlier on you go to cluster integrals then I get a partition function then I get two expansions which I eliminate and get the fugacity that allows me now to get the coefficients of cluster integrals and we will do that the way one works out with this equation then is that we will do again the same game as we discussed we will take a maximum term method there is a principle of statistical mechanics it turns out that when you have the see ml is a distribution of distributions please try to understand the distribution of distribution why as I said my nitrogen example there is any time ml the number of particles of number of number of cluster of size l that is a distribution however as this continuously changing there is a distribution of distribution okay now however there is one distribution which maximizes the partition function and that is called maximum term method is a very already very well established method improbability maximum term method so we have to find the maximum that particular set of ml I call it ml star which maximizes the partition function and one can now show by mathematical analysis in the limit n going to infinity the maximum term method dominates so there is a distribution that is the reason a system is stable that is the reason we free engine is minimum it is all tied together so now you can easily do a maximum term method there is a huge amount in wikipedia and all these things in probability theory because it is used in probability theory yes yeah exactly very good question excellent question we implement maximum term method to lagrangian multiplier whenever we are doing maximizing or minimizing something subject to a constraint so the maximum term method is general method which you used even before but lagrangian multiplier is the way to implement that whenever you are finding a extremum of something with a constraint extremum means you d d alpha that quantity is zero but you want to do it with a constraint if you do not have the constraint it will give you everything the constraint is down through lagrangian multiplier and that introduces one undetermined coefficient which you appeal to physics or experimental or our physical a and get what is the undetermined multiplier like we found out two thermodynamics beta is 1 over kbd okay so this is what i have been talking of the flow charge that there is a grand scheme that is going on and we need to appreciate the grand scheme that how the whole thing is unfolding


Just want to see how many people it's submitted to Simon 3.2. So we have 18 submissions so far. It's pretty good. Obviously, people that are submitting because they're done, but the median score is a perfect score, so that's good. All right, so today we're just going to review journaling for a minute and then talk about the Berkeley Fast File System, which is admittedly probably the oldest, cruftiest thing that we're going to talk about this semester, but fun. And something, a file system design that set a lot of the standard for later file systems and established a lot of the features that later file systems were expected to provide. All right, so one week left to do assignment 3.2. So please get going. I think people are kind of moving along, but yeah. And then 3.3 comes right on the heels of 3.2. So please keep making progress. Unfortunately, I didn't have time today to make the edits of the solution set that I wanted to, that we need before we can hand out the midterm. So we will start returning those on Monday. They are graded, and they will be the midterm grade that you get today that I'll assign this evening at some point will reflect your score on the midterm, as well as your score on the assignments up till this point. But it will not include, we don't have the midterm papers. Well, we're not ready to give the midterm papers back. So anyway, hey guys. I'm talking. What's up? No, UB learns. Sorry, I don't. Yeah, no, no thanks. Is that bad? Am I a bad person for doing that? Like I said, I'm trying to be nicer, but I have my limits. UB learns maybe outside of that bounds. Yeah, well, let's put it this way too. I haven't used UB learns up till this point, and I'm not going to learn now. There's really no reason to learn UB learns at this point. So no, but they're on the paper, so you'll get it. Any questions about the process for midterm return? So again, I understand that you guys, you're concerned about your grades and stuff like that. But there is nothing that drives me more insane than people coming in and spending half an hour trying to get one point back on a problem. Let's just be real with each other.  Your grade is a distribution. If we graded your paper 10 more times, a couple of the times, it would be a little bit higher, and a couple of times, it would be a little bit lower. So there's some distribution where your grade is. This is a human process. This is not test 161. Sadly, if I could automate this, we would have. They're humans in the loop. They read things. They respond to things a little bit differently. The people that graded these papers are very good at it. But again, there is nothing that will cause me to be frustrated with students more than if you spend a lot of time trying to get like one or two points back on the midterm. Because trust me, if I grade your paper again, I'll find some other points that you got that you weren't supposed to get. So this just ends up all working out in the wash. Again, if you think that we've made a big, serious mistake on a problem that cost you all the points or a significant amount of credit, fine, let's talk about it. But please don't come and spend lots of staff time trying to get like one point back. Again, just find another question and think, well, maybe I got a point there that I didn't deserve. And just kind of feel like everything works out. And the universe has a plan, and it's all going to be OK. Any questions about that? It's not even a question of I'm not even claiming the grade is right. Like I said, there's this distribution. It's like quantum physics. Your grade is like in somewhere. And I can put it into a bound, and I'd say with high probability, it's within this range. But I can't localize it precisely. That said, it's just a question of how we allocate resources among the staff. It would be much, much better to take that TA and have them spend half an hour helping you with assignment 3.2 or 3.3. You get a lot more out of that than quibbling over like one or two points out of the midterm. All right, cool. I also just sort of get protective of my core staff. They spend a lot of time grading these exams. And they're good at it. The real trick is to keep guru away from grading. Because guru is like the best grader that I have. But there's two problems with that. First of all, he takes forever. And his scores are so low. So every time guru grades something, I'm like, just guru, just add, give him a couple of free points. That way people won't be as mad. But he's like, no, no, no. They really didn't get that right. I've read that sentence five times. I'm like, yeah, OK. Anyway, so we don't like guru do grade anything. OK, let's just wrap up journaling again. Because this is a powerful idea. I want to make sure that it gets embedded in your brains here. So we talked about how we could alter how the cash writes data out to try to improve consistency, to minimize periods of time where there's a memory, the buffer cache, and the contents of disk are out of sync. The other approach we went over last time was journaling. And again, I think maybe I didn't do a great job of trying to explain why this works. So modifications to the disk, even something as simple as just adding a little bit of data to a file, usually require changing multiple data structures on disk. Those data structures are stored in separate blocks, typically, and so that modification ends up becoming sort of by definition not atomic. It requires a bunch of independent changes to the disk. So these operations are not atomic. Now on some level, when we do journaling, we're actually duplicating information. We're making a trade-off where we're saying, OK, I'm going to take a small amount of space on disk for this journal. But in many ways, the journal entries duplicate information that's going to be written to other parts of the disk. So for example, if I make some changes to the inode, if I say, OK, I'm going to allocate these data blocks to a particular file. I'm going to link them to the inode. I'm making changes to those inode data structures. And then I'm also writing down the same thing in the journal. So there's duplicated data on disk. The difference with the journal is that the journal is more compact. And so I can write these single journal entries with one modification to the disk. And therefore, I know that they're there. And then the other changes that are required to these on-disk data structures that end up touching a bunch of different blocks can make their way to disk as needed. OK. So how did we do this again? So these file systems have a file called the journal or multiple files. You might have seen, if you've ever rebooted your system, you might have seen there's a line during boot where an ESC4 file system should say, it's reading its journal from the last time it ran. If it shut down cleanly, there's probably nothing in there. But if it didn't, there might be stuff in there that it needs to redo. Has anyone ever seen that line before? It's there. You guys should. This should be a fun thing. Maybe for the final exam, what I'll do is I'll just print off all the Linux boot messages and give them to you. And then ask you to write an essay about them, like what's happening. Because it's kind of interesting stuff. I mean, at some point, you should sit down with those and kind of go through them and be like, OK, can I figure out what's going on? Has anyone ever been on a plane where the entertainment system rebooted? And you got to see all the, yeah, there's some airline entertainment system that uses Linux. And sometimes they'll reboot it. And you get to see all the terrible boot messages. I always love watching other passengers because they're looking at it like, am I in the matrix? Like, I saw that cat twice. I don't know, whatever. OK, so after a failure, I use the journal to get myself quickly back into a consistent state. And what I do is I go through the journal in order and I compare the contents of the journal with the contents of disk. And in places where things are out of sync and there are inconsistencies, I bring the file system onto data structures back up to date using the journal. And once I'm done, I know that the file system is in a consistent state. This avoids having to do these big file system-wide checks. So here's an example of creating a new file. So what are some of the changes I had to do? This is also a good way to review the data structure changes that are required to do something like create a file because they all have to be encapsulated in the journal. So I need an inode. So I need to allocate an inode. I need to know which inode it is. I need to allocate some data blocks from the disk, make sure that they are marked as in use, and allocated sort of linked to this particular inode. I probably need to keep track of what order they're in. Maybe that's implicit in this entry. I need to link the inode into a directory so that it has a name as part of the file system. And that's it. So these are the steps I need to take in order to create a file. So I write that down in my journal. And then over time, what's going to happen is some stuff is going to make its way to disk. I wish I had a better slide for this. So at some point, maybe inode 567 is in my cache, but at some point it gets a victor from the cache it gets written out. And so now the inode table and the contents of inode 567 are on sync on disk. And so I can mark that off in my journal that that was done. At some point, I get around updating the data structures for this particular file to associate those data blocks with it. That gets done.  So what's happening is over time, depending on the caching policies and cache behavior, parts of my journal entries are making their way to disk. And over time, the entire journal entry makes its way to disk. And once that happens, this journal entry gets removed. And I have this checkpoint that I'm moving forward. And everything before the checkpoint is finished. And everything after the checkpoint is either not on disk or partially on disk and partially not on disk. So as entries are finished, I move the checkpoint forward. Does that make sense? OK. So now let's say that my file system crashed. And the system crashed. And I'm bringing the file system back up to date. What do I do? How do I use the journal to do this? So where do I start the checkpoint? I start the checkpoint because I know, by construction, that everything before the checkpoint is done. That's all on disk. I'm not assuming there's been any disk corruption here. In the case of disk corruption, who knows? All bets are off. I mean, if I start modifying stuff on disk, there's really no file system that can recover from that. Stuff might go wrong. Stuff might be bad. But what I'm trying to get away with here is not having to write back stuff from my cache so aggressively. So what I'm assuming is there was maybe some stuff in memory that was lost. So I started the checkpoint because I know that everything before that is up to date. And I work forward from the checkpoint. And what I do is I look at my checkpoint entries and I compare the contents of the checkpoint with the contents of disk. And anything that has already been done, I can skip anything that isn't fully done. So what would happen here? Essentially, I would say, OK, data blocks 5, 8, and 97 were supposed to be the first three blocks of the file with inode 5, 6, 7. I would go and I would read that file and make sure that indeed these data blocks were linked to it. What else would I check here? There's another consistency check I can do at this point. What else should be true about blocks 5, 8, and 98? They should be marked as allocated. So I can check my block bitmaps to make sure that those blocks are marked as allocated. So did this, done. And now I make sure that the file is in the directory that it's supposed to be. And once I'm done, I can move forward. So I essentially do this from the last checkpoint. And this is nice because it's fast. So on some level, the journaling approach means that the amount of work. So roughly, if I want to do a full file system check, remember, I can walk the entire file system and do a lot of integrity checking along the way. That said, roughly how does that scale? How much work do I have to do to do a full file system check? O of n, where n is what? Roughly the size of what? Probably the size and probably the amount of space that the file system has allocated. Because essentially, I'm going to walk the directory tree and use that to check all my entries. I might need to check things both ways. So for example, I can use the directory tree to figure out every i node that's in use. Every i node that is in use is linked into the directory tree somewhere. But then what I want to do is I want to take that set and cross check it against the set of i nodes that are marked in my bitmaps to make sure they're the same. But generally, it's probably the amount of space that the file system has allocated. For journaling, what's your question? It starts with a checkpoint. Yeah, so remember the check. The idea with the, I mean, on some level, you can think of, once I checkpoint, I delete all the entries before the checkpoint. I mean, usually I think what happens is this is a circular buffer. So I'm checkpointing this direction and I'm adding stuff to the other direction. But in general, once an entry is checkpointed, it's done. I'm finished with it. And I assume that the Andes data structures are up to date. So for journaling, how long does it take to check the file system? Or at least to process the journal, roughly, what is n here? See, you guys didn't think we were going to do big O notation in this class. Now, I can mark this down on my ABET checklist. Yeah, the number of incomplete journal entries, which is on some level function of the cache size and some other things. It's a little complicated, but it's a lot smaller than the entire file system. I mean, I might have a multi-terabyte disk and only be using a few gigabytes for caching. And even if I'm caching things, remember, there's a lot of things that can cause the cache to be written back. And so the amount of entries in my journal that are uncompleted is typically a lot smaller. So journaling is an approach that's used by a variety of different systems that have this type of challenge, where they have memory that they're using the cache stuff, but they need to maintain on-disk data structures and keep them consistent. What's an example of another system like that? That might be something you might use one day or are already using. Git? I don't think it does that. That's a great question. Remember, Git doesn't run long running processes. You can crub Git's data structures, but Git usually runs, makes them days to days, so it stops, right? The trick here is I have a long running memory cache that I want to make sure is preserved. So what's an example of a system like this that might have the same issue? Where I'm making changes to things, have stuff in memory, want to make sure that eventually those changes get written out. Just start yelling out other computer systems. Yeah, so that's the thing. Web servers don't typically push changes to pages, right? A web server kind of assumes that the pages I need are on-disk and I'm just serving them to the client. The web server crashes, the cache. So a web server cache is entirely for performance, right? But what's a system that both provides access to and also modifies data that's not a file system? How about a database? You've heard of those, right? Yeah, so yeah, that's another example of a system complex on-disk data structures, a large amount of need to use memory to improve performance and the same kind of problem, right? So this is not an idea that's confined to files. Okay. Now, there's some corner cases here. So for example, if I didn't finish writing a journal entry, I can't process that journal entry. It's incomplete. So you can think of a journal entry as like a transaction. If I didn't finish writing now what the transaction was supposed to be, I just discard these. So if I get, if somehow I'm really unlucky and I crash in the middle of writing a journal entry, maybe the journal entry is too big to fit on one disk block, then I can just ignore those, right? And like I said, the goal here is it is impossible to completely eliminate data loss. We're just trying to eliminate as much as possible, let the cache do good work for us and allow ourselves to recover quickly. Okay. So nice thing about this is a lot of metadata updates in the journal can be actually represented on a page small enough that they can fit into a single disk write. So that's pretty cool. So a lot of our metadata, we don't worry about this. Now, here's an interesting question. So I mentioned before that we write things, journaling ends up making us kind of write things twice. So we write them once to the journal and then we write them once to disk. You write them journal right away and then disk later. What about data? What's the trade off here? So I can write data to the journal, right? I can just journal modifications to data blocks on disk and then I can process those updates the same way I do everything else. What's the problem with that? Yeah, data, like there's a lot, most of the rights of the disk are actual data you hope. And so the journal can actually fill up with a lot of data and it makes the journal a lot larger. So I can include them in the journal and then I have to write every data block twice. So this also increases the amount of write traffic to the disk, which is not great. Or I can lose them.  If I crash, there might be a little bit of data loss. Remember file data loss, which is a, you know, again, this may be weird to you, but the file system sort of thinks of your data as a second class citizen, right? Its data structures are way more important. And on some level that makes a lot of sense because if its data structure is corrupted, you can lose all of your data, right? Much better to lose a few rights to a few files here and there and let the file system work. Okay. Any questions about this stuff before we start talking about specific files inside? Yeah. So what problem would this help me with? Yes. Right? No, but it's the modifications that I'm talking about, right? So for example, let's say you're in the middle of appending to a file, right? So there's these metadata changes that'll require, but then there's the data that's actually gonna hit the file. So if that data is in the cache, right? Which it might be anyway in your system, it might be in the cache on its way to write this modify copy, then it's just lost, right? I still have the file, right? Prior to your changes that you were about to make, right? So the file doesn't go away. I have an older version of the file. I just don't, I may not have the latest up-to-date version. Does that make sense? I mean, again, if you think about it, at some level there has to be a place where data loss can occur, right? I mean the app could be, I've been about to write to the file and the system crashed, so who knows, right?  There are many, many, many layers there that you have to get through. So we're only, the file system only cares once you get to the file system. Anything that happens above it, not my problem, right? Okay, so let's talk about FFS, the Berkeley Fast File System. So this was first included, and so for those of you that don't know your UNIX history, I don't really either, but at some point in the close to the dawn of time, I'm sure none of you guys, no one was alive in 1982 other than me, right? I mean, okay. Yeah, 1982, UNIX development is going on. A fair amount of that is going on at Berkeley, Berkeley did and continues to lend its name to a flavor of UNIX distributions. So I think now there's free BSD, net BSD, maybe another BSD, these split and some of them went off in their own ways and stuff like that. Part of the reason for this was that there was a major variant of UNIX that was underdeveloped by IBM, and IBM was not releasing sources to it, and so it was difficult for people to hack out. So I need a file system. The first, you know, very, very early release, I shouldn't say the first, early releases of BSD started to include something called the fast file system. Like I said, there are features of the fast file system that are gonna seem completely bizarre and totally lost to the sands of time, and then there are other features that have essentially sort of become part of the de facto standard for how UNIX file systems have to work. So it's kind of Kirk McCusick still working on FFS. So this is now like as far as I know, as far as a couple of years ago. So, you know, this is now a, you know, 30 plus 35 year software development project for Kirk. So that must be kind of fun. I don't know, that's a great question. I should ask him like, does it get boring after a while, or is it still cool? I mean, FFS is still an active development. So he's still like, there's still stuff that he and other people are building, but early variants were for Kirk. Oh, sorry, so it changed ages at some point. So that's called the UFS, UNIX file system. Has anyone ever mounted a UFS system? I don't know, I don't know. It must be used by some of the BSD variants. It's not, UNIX has its own history of file system development, uses some different file systems. Okay, so like I said, there are lasting contributions that FFS made to file system design. And then there are the less lasting contributions, and they're sort of fun to talk about, right? The fast part of the fast file system, at least in early versions, had a huge amount to do. So file system design has always been very tied to the features and the characteristics of the underlying hardware. I mean, file systems in many ways are uniquely tied to the features of one specific device, and that is a disk. In 1982, we're talking about spinning disk drives, these old things with sectors and platters and all sorts of things like that. So, and keep in mind, at this point, the performance, there were big performance gains to be made by thinking about disk geometry. So by disk geometry, we start to think about where is data on disk? On a, I'm sure this is true of a flash drive too. I mean, I think if you had a flash drive, you could point to where the data was, right? I mean, it's on one of the flash chips somewhere. But on spinning disks, there's a location on the disk. Like that is where your data is. So if I take that disk and I wave a magnet over that little part, that part of the disk is gone. Maybe the file system can recover. Maybe not, but there is a locality to data. So what are some of the ways that we might want to exploit the rotational features of a disk drive? Disk geometry. Somebody actually brought up an interesting one the other day, which is still true for spinning disks. Again, disk spin. They're platters. They've got an inside and an outside. They've got multiple platters. One set of heads. What might I want to do? Yeah, so it's kind of random, right? As the disk is, this is one of those things about disks you're just like, thank God this went away, right? But it hasn't really for newer disks. But when the disk spins, the linear speed of the outside edge is higher than the inside edge. It's the two parts of the disk are doing the same number of revolutions per second. But the outside is much longer, right? The inside is shorter. So the outside actually has farther to travel. So that means that I can actually read data, assuming I can keep up with the disk, which wasn't always the case in the FFS era. We'll come back to this. This is one of the more awesome FFS features. Awesome slash. But the outside of the disk moves fast. So if I can keep up with the speed, I can read data faster from the outside of the disk drive, right? It's just physics. So where do a lot of file systems start to put data when you boot them up? At the outside, I mean, if the disk is mostly empty, the best place to put data is the outside. As the disk fills, and I have to use these inside parts, maybe this means your disk gets a little, starts to feel slower as time goes on. It might be better to do the opposite, right? Start in the, start, give people realistic expectations and then things get faster over time, you know? Anyway, but I mean, most of us, how many people feel like their computer gets slower over time just on its own without any help? Yeah, it's weird. It's probably not true, actually. It's probably just totally psychological. Anyway, so outside moves faster than the inside. What else? That's not it. I mean, we could talk about this for half an hour, right? What other disk geometry features? Remember, we've got multiple platters, one set of heads. What's that? So I've got multiple heads. So remember that the arm has heads on it and those heads are simultaneously reading from all platters, right? This is, oh no, no, no, we're not gonna modify the disk drive itself, right? We're stuck with disk drives. Now, multiple head drives, you can't say no one hasn't tried it, right? That's the thing. I'm sure you could look on, you know, you could look on Google and you could find me a multi-head drive, right? But most of the ones today I think have single heads. Yeah. Well, you're warmer. I mean, the size is sort of irrelevant, but the fact that the heads are all in the same place at the same time means what? I mean, what's slow about reading from the spinning disk? Moving the heads. So let's say I have a single file. Where should I put the single file? File contents are very likely to be accessed all at the same time. This isn't necessarily true for every kind of file, but it's true for a lot of files. So where should I put all those file contents? Yeah. Imagine that I start putting the file on the top of one platter. I use one track. And then I use the bottom of that platter. And then I use the next platter down and the next platter down. And I keep doing that because now I have a file that I can read in its entirety without moving the heads, which is awesome. That's what I want. So this stuff, again, this stuff is wild. What about I-Node type data structures? So I-Nodes are an interesting case. The other thing you have to keep in mind about 1982 is that memory sizes were quite small in early computers. So this idea of just building a huge cache and memory so that I could cache the entire file system, not happening. Yeah. Yeah? So I could put the I-Nodes somewhere in the middle to minimize the seek distance between every file and every I-Node. I could also maybe try to put them in the outside because they're faster to read there. It's sort of trade-offs. Data blocks, talked about this, port-to-put-related files. So FFS, we're going to come back to some of the geometry stuff, right? But FFS also made some sort of standardize certain things. FFS included these larger blocks for reading and writing from the file, sort of the standard 4k block size that comes from FFS. FFS included a way to... So remember, one of the things we want to do frequently is find data blocks or find blocks that I can use for some sort of file system data structure that are close to each other on disk because stuff that's close on disk is going to be easier to read at the same time, read or write at the same time, smaller seeks. Earlier file systems apparently had no way to do this very well. So for example, if I just build up a free list of blocks on disk over time, that free list, if I'm not careful, can become totally unordered. And so earlier file systems, if you said, hey, I need four free blocks, they would give you a block over there, there, there, there, right? I mean, they had no way to allocate blocks intelligently to find blocks that were close to each other, right? And so FFS included an ordered free list to make this possible. So again, this is someone who was studied the features of this device very carefully and built a software system that responded very well to the specific features of disks at that time. Yeah, so FFS added symbolic links, yay. File locking is a feature, unrestricted file name links. I mean, it boggles my mind that this is still a problem that we're living with today, right? Like I have seen some very, very bad UBIT names, right? Does anyone wanna reveal that they have a bad one and what it is? Who has one that they don't think is very good? What is it? I thought it was gonna be like 666, you know? But it was gonna have a little bit of a number. Yeah, I know, but someone else has that one, right? Yeah, okay, who? Yeah, oh yeah. Well, I've seen ones that made something terrible in my language. Yeah, anyway, so, but why, like, why?  I mean, the fact that we're still dealing with, I don't know, whatever, anyway. Like eight characters is, I don't know. Someone's responsible for that, by the way. Human being made that decision, right? If we could find them, we could punish them. Anyway, but early file systems had these types of restrictions. It was like, oh, sorry, you can't name a file with more than eight characters in it, which is sort of dumb. So, FFS did away with those. So we know these two enemies of things on disks. So, seeking times are bad. Rotational delay is also a problem, but sort of a minor problem. But again, at FFS-era disks, I suspect that actually rotational delay was more of a concern than it is now. Not necessarily on par with seek times, but as we packed more and more data onto a disk, I think the seek times have gotten probably not improved very much, if not gotten a little bit slower, because the target that I'm aiming for is so much smaller. So at this point in time, the tracks are so close together on disks that in order to get to one, I actually have to seek all the way across the disks and center that head on a very, very, very, very narrow little track. So that's gotten tough. So FFS introduced this idea of cylinder groups, and this idea persists till this day. So a cylinder group is all the data that can be read without moving the head very far, right? It's not really without moving the head at all, because that's a very small amount of data, but it's all, you know, imagine I break the platter up into like eight disks that are sort of nested inside each other. Each one of those is a cylinder group. So it's all the data I can read from the disk, without having to move the heads very far. And that's on all the platters, top to bottom. Now, what FFS did, which is sort of clever, I remember we talked about, where do I put inodes? To make sure that they're close to data blocks. I could put them in the middle. What FFS did is that every cylinder group has a backup copy of the file system super block. That's that data structure that contains the location of all the inode maps, the location of all the free block bit maps. Like, this is sort of a data structure that's incredibly important for the file system to function properly. Why would I put backup copies on every cylinder group? Yeah. Yeah, if I fail, if part of the disk goes bad, it's more likely that I can read this. And this is still true. File system still stash backup copies of these data structures. Really important data structures. The thing is they don't consume very much space. And so it doesn't, you don't lose a lot of space from your disk if I make 16 copies of the super block and put them in well-known locations just in case the sector or the block that the super block lives on goes bad. I don't wanna lose the whole disk. So each cylinder has its own header. That header has super block-like information in it. It stores for the cylinder group how many inodes are available, how many data blocks are available, things like this. It has data structures for maintaining lists of available data blocks. Number of inodes for cylinder group and data blocks. So each cylinder group is kind of like what? So it's almost like I've broken this file system into little pieces. And each piece is sort of like its own what? I mean, what other thing has these features? So every cylinder group has a super block, inodes and data blocks. This starts to sound like a what? Like its own little file system, right? I don't know why people are still laughing at this slide, right? You guys even seen this movie? Okay, I haven't actually. So anyway, maybe I never thought it's funny, but it always gets a laugh. So yeah, so every super block is like its own little file system. Now, do you remember when we printed off the statistics for EXT4? Remember what we saw? We saw all these groups. So EXT4 calls these groups, but they're essentially the same thing. Every group has its own block bitmap. Every group has its own Inode bitmap. Every group has data blocks and Inodes that it allocates. And the goal is to allocate a file entirely from a specific group, which guarantees or ensures that all of that file's data structures are relatively close to each other on disk. This is sort of how we solve the problem of trying to keep Inodes and data blocks close to each other. Break up the disk into these little parts, treat them all sort of independently from each other. Yeah, so the FFS super block at the time contained information that, so FFS would measure stuff about the disk. I think during the, maybe when you form-added it or some other time, it would run these tests to ascertain information about the disk, and it would store that information in the super block and use it to do wild stuff, okay? So here's an example. Okay, and this was true for a period of time. Remember when we talked about where to put things? We were making the assumption that the file system could actually return data over the bus to the rest of the system fast enough to read data at full speed off of the disk. What if this isn't true? What if my bus, because remember this is like, I don't know what sort of bus they were using at the time. But the actual data bus that connected the disk to the rest of the system wasn't fast enough to keep up with a read. So I actually can't read every block off the disk in order.  Now, what happens if I put everything next to each other? Let's say I start reading a large file and I get four blocks in and the disk is like, oh no, my memory cache is full and it's taking so long to send this data back to the rest of the system. What do I have to do to read block five? All the way around, right? Let the disk do a full rotation. Now at that point hopefully the cache is drained and I can pick up block five. So how do I get around this problem? Yeah, yeah, that's right. I put like one skip, one skip, one skip, one skip, or one skip, skip, one skip, skip. Now I can use those other blocks for other stuff, right? Like I can have another file that's interleaved there. So I could have file A, B, C and I put A block, B block, C block, A block, B block, C block, A block, B block, C block, right? Yeah, so that's pretty nasty, right? But that's what FFS would do, you know? Cause it was trying, right? It was like, look, I've got this disk.  I'm trying to run that F in my name. That's not for file system. So yeah, so this sort of stuff really, these sort of features were kind of, like I said, lost to the sands of time. At this point most disks can transfer data back to the rest of the system. In some cases, faster than they can read an off disk and that's so that you can let them have a cache locally. So yeah, yeah, this is one of those things that was like, it was pretty cool that they managed to do this. And I suspect when Kirk took out this code, he was like, thank God, you know, those days are over. The future has turned out to be kind of okay because I don't have to do this sort of rotational planning anymore. So this is interesting. So this sort of stuff, right? I mean, this is a question of, we're studying now something that's 35 years old, almost as old as I am, does this stuff matter anymore? And if not, is that not a good thing? So one interesting thing that's happened in the file system world that sort of mirrors what's happening in other parts of computer systems. So when we talk about computer systems, particularly operating systems and other computer systems interact very closely with hardware. That's the same thing for network protocol stacks. It's the same thing for databases on some level because databases have to achieve good performance where they have to understand things about the file system and how the file system works. There's always this tension between trying to make hardware better and trying to make software more intelligent. So, and I work closely with people that do hardware stuff, right? And so we have this argument all the time, right? Which is kind of, you know, the hardware people are like, we're really clever, we're gonna make hardware better and more, we're gonna make hardware better and we're gonna make hardware more clever. And software people are like, no, no, no, don't do that. Particularly don't do that if it obscures features about the hardware that I might want to know. So example of this, modern disk drives present this linear namespace, like I said, like a linear array of blocks. On some level, file systems are allowed to assume and do assume that blocks that are contiguous to each other in the array are close to each other on disk because that's normally kind of true, right? There's only one case where it becomes not true which is that apparently when they make disk drives, spinning disk drives, and they test them initially, a bunch of the blocks on the drive just don't work.  So when they made it, there were just, you know, the little process variation, there were a couple of the blocks on the disk that I can't reliably read and write data to. So what do I do? So I can mark them as bad, but newer drives are a little more clever than that, okay? So let's say that block five is bad. What do I do? So I can mark it as bad, but let's say I want to preserve this linear namespace, what can I do? Yeah, great idea, right? So the disk has its own little mapping table where it's like, I know you said you wanted block five, but my block five doesn't work so good. So I'm gonna give you block 72,842, right? And this works great, except for one problem. Where is block 72,892? Not close to block four, right? And so this feature, right, which on some level is clever, you know, on some level, the hardware people are like, oh, I'm gonna do this cool thing and it's gonna make it, they're trying to make our lives easier. That's what they keep saying. But, you know, again, disks that make these sort of assumptions can have big performance problems, particularly if I put like an Inotable there, right? So the disk is like, why is this happening? I keep like reading this Inotable, it takes like 10 times longer than every other Inotable on disk, why? And it's because the disk is like doing this huge seek out to these reserved sectors that they put way at the edge of the disk, doesn't case any, right? So this kind of stuff drives software people nuts. Yeah, anyway, this is what I just talked about, right? So as disks move things around, this sort of thing becomes really hard. One of the interesting things that happened over time is that, you know, we just saw an example of file system designs that are really, really tied to this idea that file systems know where disk blocks are and that they can make assumptions about things being, like for example, if I read block N and block M, the smaller the distance between them, the faster that's going to go. And a lot of file system designs are sort of based on this. I had a colleague in graduate school who explored what happens if that assumption totally fails. So certain types of systems, there is no guarantee about that, right? They're just random, you know? The performance of any two blocks is random. And it turns out that some of the locality-based planning that some of the file systems try to do actually makes things slower if you completely undermine those locality assumptions. All right. Any questions about this? We're almost done. I think I'm almost done with my slides. Just gonna go through this. Yeah, so, yeah, so FFS is still, like I said, an interactive development. So, you know, we're still working on figuring out the right block size. Still, oh, this was a cute thing. So now, one of the things that FFS and other file systems have started to do is in certain types of inodes, if the file is really small, I can actually jam all the file content into the inode itself. So I make the inodes a little bit bigger. And for directories now, I can actually, reading the inode and reading the directory, assuming the directory is small, is the same operation. So that's kind of cool. UFS introduced some really interesting ideas about consistency, including something called soft updates, which I don't fully understand. I would have to write a lecture probably to explain. Okay, so Monday, we're gonna talk about log structured file systems. So FFS is like this classic file system design, just like right down the middle, really well done, really well engineered. Log structured file systems, on the other hand, are this wacko idea that people spent 20 years deciding whether or not it was a good idea and people got into arguments over and people got angry about. But it's cool, it's a neat observation. And then we'll talk a little bit about how to read a research paper because on Wednesday next week we'll talk about RAID after you guys read that paper. I will post the paper information early next week and we will start distributing midterms in office hours on Monday. Have a great weekend, enjoy the weather. I will see you guys on Monday.